Untitled
unknown
plain_text
3 years ago
1.8 kB
4
Indexable
import bpy import gpu def draw(self, context): if not self.modal_redraw: return self.framebuffer = gpu.state.active_framebuffer_get() self.viewport_info = gpu.state.viewport_get() self.width = self.viewport_info[2] self.height = self.viewport_info[3] self.framebuffer_image.scale(self.width, self.height) self.pixelBuffer = self.framebuffer.read_color(0, 0, self.width, self.height, 4, 0, 'FLOAT') self.pixelBuffer.dimensions = self.width * self.height * 4 self.framebuffer_image.pixels.foreach_set(self.pixelBuffer) self.modal_redraw = False class ModalFramebufferCopy(bpy.types.Operator): bl_idname = "view3d.modal_framebuffer_copy" bl_label = "Draw 3D View Framebuffer" def __init__(self): print("Start example code") self.modal_redraw = False self.framebuffer = None if not "color_buffer_copy" in bpy.data.images: self.framebuffer_image = bpy.data.images.new("color_buffer_copy" , 32, 32, float_buffer=True) else: self.framebuffer_image = bpy.data.images["color_buffer_copy"] def modal(self, context, event): if event.type in {'ESC'}: bpy.types.SpaceView3D.draw_handler_remove(self._handle_3d, 'WINDOW') return {'CANCELLED'} self.modal_redraw = True return {'PASS_THROUGH'} def invoke(self, context, event): self._handle_3d = bpy.types.SpaceView3D.draw_handler_add(draw, (self, context), 'WINDOW', 'PRE_VIEW') context.window_manager.modal_handler_add(self) return {'RUNNING_MODAL'} def register(): bpy.utils.register_class(ModalFramebufferCopy) if __name__ == "__main__": register() bpy.ops.view3d.modal_framebuffer_copy('INVOKE_DEFAULT')
Editor is loading...