78 lines
2.3 KiB
Python
78 lines
2.3 KiB
Python
|
import bpy, blf, bgl, os, gpu
|
||
|
from gpu_extras.batch import batch_for_shader
|
||
|
|
||
|
class ViewportDraw:
|
||
|
|
||
|
def __init__(self, context, text):
|
||
|
|
||
|
bakefile = "TLM_Overlay.png"
|
||
|
scriptDir = os.path.dirname(os.path.realpath(__file__))
|
||
|
bakefile_path = os.path.abspath(os.path.join(scriptDir, '..', '..', 'assets', bakefile))
|
||
|
|
||
|
image_name = "TLM_Overlay.png"
|
||
|
|
||
|
bpy.ops.image.open(filepath=bakefile_path)
|
||
|
|
||
|
print("Self path: " + bakefile_path)
|
||
|
|
||
|
for img in bpy.data.images:
|
||
|
if img.filepath.endswith(image_name):
|
||
|
image = img
|
||
|
break
|
||
|
|
||
|
if not image:
|
||
|
image = bpy.data.images[image_name]
|
||
|
|
||
|
x = 15
|
||
|
y = 15
|
||
|
w = 400
|
||
|
h = 200
|
||
|
|
||
|
self.shader = gpu.shader.from_builtin('2D_IMAGE')
|
||
|
self.batch = batch_for_shader(
|
||
|
self.shader, 'TRI_FAN',
|
||
|
{
|
||
|
"pos": ((x, y), (x+w, y), (x+w, y+h), (x, y+h)),
|
||
|
"texCoord": ((0, 0), (1, 0), (1, 1), (0, 1)),
|
||
|
},
|
||
|
)
|
||
|
|
||
|
if image.gl_load():
|
||
|
raise Exception()
|
||
|
|
||
|
self.text = text
|
||
|
self.image = image
|
||
|
#self.handle = bpy.types.SpaceView3D.draw_handler_add(self.draw_text_callback, (context,), 'WINDOW', 'POST_PIXEL')
|
||
|
self.handle2 = bpy.types.SpaceView3D.draw_handler_add(self.draw_image_callback, (context,), 'WINDOW', 'POST_PIXEL')
|
||
|
|
||
|
def draw_text_callback(self, context):
|
||
|
|
||
|
font_id = 0
|
||
|
blf.position(font_id, 15, 15, 0)
|
||
|
blf.size(font_id, 20, 72)
|
||
|
blf.draw(font_id, "%s" % (self.text))
|
||
|
|
||
|
def draw_image_callback(self, context):
|
||
|
|
||
|
if self.image:
|
||
|
bgl.glEnable(bgl.GL_BLEND)
|
||
|
bgl.glActiveTexture(bgl.GL_TEXTURE0)
|
||
|
|
||
|
try:
|
||
|
bgl.glBindTexture(bgl.GL_TEXTURE_2D, self.image.bindcode)
|
||
|
except:
|
||
|
bpy.types.SpaceView3D.draw_handler_remove(self.handle2, 'WINDOW')
|
||
|
|
||
|
self.shader.bind()
|
||
|
self.shader.uniform_int("image", 0)
|
||
|
self.batch.draw(self.shader)
|
||
|
bgl.glDisable(bgl.GL_BLEND)
|
||
|
|
||
|
def update_text(self, text):
|
||
|
|
||
|
self.text = text
|
||
|
|
||
|
def remove_handle(self):
|
||
|
#bpy.types.SpaceView3D.draw_handler_remove(self.handle, 'WINDOW')
|
||
|
bpy.types.SpaceView3D.draw_handler_remove(self.handle2, 'WINDOW')
|