From b990ec5e744b8ce8369f614f3ac117a041f07141 Mon Sep 17 00:00:00 2001 From: akaneyu Date: Mon, 11 Mar 2024 22:26:26 +0900 Subject: [PATCH] Support Blender 4.0 --- addon/__init__.py | 6 ++--- addon/app.py | 33 ++++++++++------------- addon/ui_renderer.py | 62 +++++++++++++++++++++++++------------------- 3 files changed, 51 insertions(+), 50 deletions(-) diff --git a/addon/__init__.py b/addon/__init__.py index 7623a7d..26c8f95 100644 --- a/addon/__init__.py +++ b/addon/__init__.py @@ -1,5 +1,5 @@ ''' - Copyright (C) 2021 - 2023 Akaneyu + Copyright (C) 2021 - 2024 Akaneyu This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,8 +18,8 @@ bl_info = { "name": "Symmetrize Texture", "author": "akaneyu", - "version": (1, 1, 3), - "blender": (2, 93, 0), + "version": (1, 2, 0), + "blender": (3, 3, 0), "location": "View3D", "warning": "", "description": "", diff --git a/addon/app.py b/addon/app.py index 07b0990..861ef3b 100644 --- a/addon/app.py +++ b/addon/app.py @@ -1,5 +1,5 @@ ''' - Copyright (C) 2021 - 2023 Akaneyu + Copyright (C) 2021 - 2024 Akaneyu This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,16 +15,13 @@ along with this program. If not, see . ''' -import sys import os import ctypes -import math import bpy import bpy.utils.previews import blf import numpy as np from . ui_renderer import UIRenderer as UIRenderer -from . import utils class Session: def __init__(self): @@ -77,35 +74,31 @@ def draw_handler(): session.ui_renderer.render_arrow(center, arrow_angle) - info_text = "LMB: Perform\n" \ - + "RMB: Cancel" + info_text = "[LMB] Perform " \ + + "[RMB] Cancel" # brush if session.brush_active and session.brush_position: session.ui_renderer.render_brush_frame(session.brush_position, session.brush_size) - info_text = "LMB: Perform\n" \ - + "RMB: Finish\n" \ - + "F: Change brush size" + info_text = "[LMB] Perform " \ + + "[RMB] Finish " \ + + "[F] Change brush size" - area_height = context.area.height + area_width, area_height = context.area.width, context.area.height # info text if info_text: - blf.enable(0, blf.WORD_WRAP) - blf.word_wrap(0, 200) - blf.color(0, 1.0, 1.0, 1.0, 1.0) + ui_scale = context.preferences.system.ui_scale - if bpy.context.area.type == 'VIEW_3D': - blf.position(0, 85, area_height - 150, 0) - else: - blf.position(0, 85, area_height - 70, 0) + session.ui_renderer.render_info_box((0, 0), (area_width, 20 * ui_scale)) - blf.size(0, 14, 72) + blf.position(0, 8 * ui_scale, 6 * ui_scale, 0) + blf.size(0, 11 * ui_scale) if bpy.app.version >= (3, 6) \ + else blf.size(0, 11 * ui_scale, 72) + blf.color(0, 0.7, 0.7, 0.7, 1.0) blf.draw(0, info_text) - blf.disable(0, blf.WORD_WRAP) - def load_icons(): global session diff --git a/addon/ui_renderer.py b/addon/ui_renderer.py index 7d009de..13cbd20 100644 --- a/addon/ui_renderer.py +++ b/addon/ui_renderer.py @@ -1,5 +1,5 @@ ''' - Copyright (C) 2020 Akaneyu + Copyright (C) 2020 - 2024 Akaneyu This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,10 +15,6 @@ along with this program. If not, see . ''' -import time -import bpy -import bgl -import blf import gpu from gpu_extras.batch import batch_for_shader from mathutils import Matrix @@ -94,9 +90,6 @@ class UIRenderer: self.dotted_line_shader_u_color2 = self.dotted_line_shader.uniform_from_name("color2") def render_border(self, pos1, pos2): - bgl.glEnable(bgl.GL_BLEND) - bgl.glLineWidth(1.0) - batch = batch_for_shader(self.default_shader, 'LINES', {"pos": [pos1, pos2]}) @@ -107,16 +100,9 @@ class UIRenderer: batch.draw(self.default_shader) - err = bgl.glGetError() - if err != bgl.GL_NO_ERROR: - print('render_border') - print('OpenGL error:', err) - def render_arrow(self, center, angle): - bgl.glEnable(bgl.GL_BLEND) - bgl.glLineWidth(1.0) - - gpu.matrix.load_identity() + prev_blend = gpu.state.blend_get() + gpu.state.blend_set('ALPHA') with gpu.matrix.push_pop(): gpu.matrix.translate(center) @@ -151,14 +137,11 @@ class UIRenderer: batch.draw(self.default_shader) - err = bgl.glGetError() - if err != bgl.GL_NO_ERROR: - print('render_arrow') - print('OpenGL error:', err) + gpu.state.blend_set(prev_blend) def render_brush_frame(self, pos, radius): - bgl.glEnable(bgl.GL_BLEND) - bgl.glLineWidth(2.0) + prev_line_width = gpu.state.line_width_get() + gpu.state.line_width_set(2.0) verts = self.create_brush_frame_vertices(pos, radius) @@ -180,10 +163,7 @@ class UIRenderer: batch.draw(self.dotted_line_shader) - err = bgl.glGetError() - if err != bgl.GL_NO_ERROR: - print('render_brush_frame') - print('OpenGL error:', err) + gpu.state.line_width_set(prev_line_width) def create_brush_frame_vertices(self, pos, radius): segs = 32 @@ -206,3 +186,31 @@ class UIRenderer: verts.append(verts[0]) return np.array(verts, 'f') + + def render_info_box(self, pos1, pos2): + prev_blend = gpu.state.blend_get() + gpu.state.blend_set('ALPHA') + + verts = [ + pos1, + (pos2[0], pos1[1]), + (pos1[0], pos2[1]), + pos2 + ] + + indices = [ + (0, 1, 2), + (2, 1, 3) + ] + + batch = batch_for_shader(self.default_shader, 'TRIS', + {"pos": verts}, indices=indices) + + self.default_shader.bind() + + self.default_shader.uniform_vector_float(self.default_shader_u_color, + np.array([0, 0, 0, 0.7], 'f'), 4) + + batch.draw(self.default_shader) + + gpu.state.blend_set(prev_blend)