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')
 |