replace bgl with gpu calls update for 4.0
3.0.0 - Update for Blender 4.0 (Breaking release, removed bgl to use gpu) - fixed: openGL draw camera frame and passepartoutgpv2
parent
4fadf35163
commit
cf2ba8448a
|
@ -1,5 +1,10 @@
|
|||
# Changelog
|
||||
|
||||
3.0.0
|
||||
|
||||
- Update for Blender 4.0 (Breaking release, removed bgl to use gpu)
|
||||
- fixed: openGL draw camera frame and passepartout
|
||||
|
||||
2.5.0
|
||||
|
||||
- added: Animation manager new button `Frame Select Step` (sort of a checker deselect, but in GP dopesheet)
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import bpy
|
||||
from bpy.types import Operator
|
||||
import bgl
|
||||
from gpu_extras.presets import draw_circle_2d
|
||||
from gpu_extras.batch import batch_for_shader
|
||||
import gpu
|
||||
|
@ -190,7 +189,7 @@ class GPTB_OT_eraser(Operator):
|
|||
bl_options = {'REGISTER', 'UNDO'}
|
||||
|
||||
def draw_callback_px(self):
|
||||
bgl.glEnable(bgl.GL_BLEND)
|
||||
gpu.state.blend_set('ALPHA')
|
||||
#bgl.glBlendFunc(bgl.GL_CONSTANT_ALPHA, bgl.GL_ONE_MINUS_CONSTANT_ALPHA)
|
||||
#bgl.glBlendColor(1.0, 1.0, 1.0, 0.1)
|
||||
|
||||
|
@ -201,7 +200,7 @@ class GPTB_OT_eraser(Operator):
|
|||
bg_color = area.spaces.active.shading.background_color
|
||||
#print(bg_color)
|
||||
|
||||
shader = gpu.shader.from_builtin('2D_UNIFORM_COLOR')
|
||||
shader = gpu.shader.from_builtin('POLYLINE_UNIFORM_COLOR')
|
||||
shader.bind()
|
||||
shader.uniform_float("color", (1, 1, 1, 1))
|
||||
for mouse, radius in self.mouse_path:
|
||||
|
@ -210,7 +209,7 @@ class GPTB_OT_eraser(Operator):
|
|||
batch.draw(shader)
|
||||
|
||||
draw_circle_2d(self.mouse, (0.75, 0.25, 0.35, 1.0), self.radius, 24)
|
||||
bgl.glDisable(bgl.GL_BLEND)
|
||||
gpu.state.blend_set('NONE')
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -4,8 +4,8 @@ bl_info = {
|
|||
"name": "GP toolbox",
|
||||
"description": "Tool set for Grease Pencil in animation production",
|
||||
"author": "Samuel Bernou, Christophe Seux",
|
||||
"version": (2, 5, 0),
|
||||
"blender": (3, 0, 0),
|
||||
"version": (3, 0, 0),
|
||||
"blender": (4, 0, 0),
|
||||
"location": "Sidebar (N menu) > Gpencil > Toolbox / Gpencil properties",
|
||||
"warning": "",
|
||||
"doc_url": "https://gitlab.com/autour-de-minuit/blender/gp_toolbox",
|
||||
|
|
20
functions.py
20
functions.py
|
@ -165,7 +165,6 @@ def randomise_points(mat, points, attr, strength) :
|
|||
setattr(point,attr,value+random*strength)
|
||||
|
||||
|
||||
|
||||
def zoom_to_object(cam, resolution, box, margin=0.01) :
|
||||
min_x= box[0]
|
||||
max_x= box[1]
|
||||
|
@ -216,25 +215,6 @@ def zoom_to_object(cam, resolution, box, margin=0.01) :
|
|||
#print(matrix,resolution)
|
||||
return modelview_matrix,projection_matrix,frame,resolution
|
||||
|
||||
|
||||
|
||||
def set_viewport_matrix(width, height, mat):
|
||||
from bgl import glViewport,glMatrixMode,GL_PROJECTION,glLoadMatrixf,Buffer,GL_FLOAT,glMatrixMode,GL_MODELVIEW,glLoadIdentity
|
||||
|
||||
glViewport(0,0,width,height)
|
||||
|
||||
#glLoadIdentity()
|
||||
|
||||
glMatrixMode(GL_PROJECTION)
|
||||
|
||||
projection = [mat[j][i] for i in range(4) for j in range(4)]
|
||||
glLoadMatrixf(Buffer(GL_FLOAT, 16, projection))
|
||||
|
||||
#glMatrixMode( GL_MODELVIEW )
|
||||
#glLoadIdentity()
|
||||
|
||||
|
||||
|
||||
# get object info
|
||||
def get_object_info(mesh_groups, order_list = []) :
|
||||
scene = bpy.context.scene
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import bpy
|
||||
import gpu
|
||||
import bgl
|
||||
# import blf
|
||||
from gpu_extras.batch import batch_for_shader
|
||||
from bpy_extras.view3d_utils import location_3d_to_region_2d
|
||||
|
@ -30,6 +29,20 @@ def view3d_camera_border_2d(context, cam):
|
|||
frame_px = [location_3d_to_region_2d(region, rv3d, v) for v in frame]
|
||||
return frame_px
|
||||
|
||||
def vertices_to_line_loop(v_list, closed=True) -> list:
|
||||
'''Take a sequence of vertices
|
||||
return a position lists of segments to create a line loop passing in all points
|
||||
the result is usable with gpu_shader 'LINES'
|
||||
ex: vlist = [a,b,c] -> closed=True return [a,b,b,c,c,a], closed=False return [a,b,b,c]
|
||||
'''
|
||||
loop = []
|
||||
for i in range(len(v_list) - 1):
|
||||
loop += [v_list[i], v_list[i + 1]]
|
||||
if closed:
|
||||
# Add segment between last and first to close loop
|
||||
loop += [v_list[-1], v_list[0]]
|
||||
return loop
|
||||
|
||||
def draw_cam_frame_callback_2d():
|
||||
context = bpy.context
|
||||
if context.region_data.view_perspective != 'CAMERA':
|
||||
|
@ -41,11 +54,12 @@ def draw_cam_frame_callback_2d():
|
|||
if not main_cam:
|
||||
return
|
||||
|
||||
bgl.glEnable(bgl.GL_BLEND)
|
||||
gpu.state.blend_set('ALPHA')
|
||||
|
||||
frame_point = view3d_camera_border_2d(
|
||||
context, context.scene.camera.parent)
|
||||
shader_2d = gpu.shader.from_builtin('2D_UNIFORM_COLOR')
|
||||
shader_2d = gpu.shader.from_builtin('UNIFORM_COLOR') # POLYLINE_FLAT_COLOR
|
||||
# gpu.shader.from_builtin('2D_UNIFORM_COLOR')
|
||||
|
||||
if context.scene.gptoolprops.drawcam_passepartout:
|
||||
### PASSEPARTOUT
|
||||
|
@ -109,8 +123,8 @@ def draw_cam_frame_callback_2d():
|
|||
|
||||
### Camera framing trace over
|
||||
|
||||
bgl.glLineWidth(1)
|
||||
bgl.glEnable(bgl.GL_LINE_SMOOTH)
|
||||
gpu.state.line_width_set(1.0)
|
||||
# bgl.glEnable(bgl.GL_LINE_SMOOTH) # old smooth
|
||||
|
||||
"""
|
||||
## need to accurately detect viewport background color (difficult)
|
||||
|
@ -135,15 +149,14 @@ def draw_cam_frame_callback_2d():
|
|||
frame_color = (0.0, 0.0, 0.25, 1.0)
|
||||
|
||||
screen_framing = batch_for_shader(
|
||||
shader_2d, 'LINE_LOOP', {"pos": frame_point})
|
||||
shader_2d, 'LINES', {"pos": vertices_to_line_loop(frame_point)})
|
||||
|
||||
shader_2d.bind()
|
||||
shader_2d.uniform_float("color", frame_color)
|
||||
screen_framing.draw(shader_2d)
|
||||
|
||||
# bgl.glLineWidth(1)
|
||||
bgl.glDisable(bgl.GL_LINE_SMOOTH)
|
||||
bgl.glDisable(bgl.GL_BLEND)
|
||||
# bgl.glDisable(bgl.GL_LINE_SMOOTH) # old smooth
|
||||
gpu.state.blend_set('NONE')
|
||||
|
||||
|
||||
draw_handle = None
|
||||
|
|
Loading…
Reference in New Issue