[Bf-blender-cvs] [9caa587519b] blender2.8: Py API Docs: Remove older GPUOffScreen example

Jacques Lucke noreply at git.blender.org
Tue Nov 13 16:45:26 CET 2018


Commit: 9caa587519b40e3fb2479d16328f91042d9eaeee
Author: Jacques Lucke
Date:   Tue Nov 13 16:43:17 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB9caa587519b40e3fb2479d16328f91042d9eaeee

Py API Docs: Remove older GPUOffScreen example

I think this example does not belong into the api docs and certainly not in the place where it was until now.
Maybe this can become a template in Blender but personally I don't see much value in it as an "official example" because it is hard to see what is going on exactly.
There are a few other examples that show how to use the GPUOffScreen object now.

===================================================================

D	doc/python_api/examples/gpu.types.GPUOffScreen.py

===================================================================

diff --git a/doc/python_api/examples/gpu.types.GPUOffScreen.py b/doc/python_api/examples/gpu.types.GPUOffScreen.py
deleted file mode 100644
index ac95c75bf6c..00000000000
--- a/doc/python_api/examples/gpu.types.GPUOffScreen.py
+++ /dev/null
@@ -1,267 +0,0 @@
-# Draws an off-screen buffer and display it in the corner of the view.
-import bpy
-import bgl
-import gpu
-import numpy as np
-
-g_imageVertSrc = '''
-in vec2 texCoord;
-in vec2 pos;
-
-out vec2 texCoord_interp;
-
-void main()
-{
-    gl_Position = vec4(pos.xy, 0.0f, 1.0);
-    gl_Position.z = 1.0f;
-    texCoord_interp = texCoord;
-}
-'''
-
-g_imageFragSrc = '''
-in vec2 texCoord_interp;
-out vec4 fragColor;
-
-uniform sampler2D image;
-
-void main()
-{
-    fragColor = texture(image, texCoord_interp);
-}
-'''
-
-g_plane_vertices = np.array([
-    ([-1.0, -1.0], [0.0, 0.0]),
-    ([1.0, -1.0], [1.0, 0.0]),
-    ([1.0, 1.0], [1.0, 1.0]),
-    ([1.0, 1.0], [1.0, 1.0]),
-    ([-1.0, 1.0], [0.0, 1.0]),
-    ([-1.0, -1.0], [0.0, 0.0]),
-], [('pos', 'f4', 2), ('uv', 'f4', 2)])
-
-
-class VIEW3D_OT_draw_offscreen(bpy.types.Operator):
-    bl_idname = "view3d.offscreen_draw"
-    bl_label = "Viewport Offscreen Draw"
-
-    _handle_calc = None
-    _handle_draw = None
-    is_enabled = False
-
-    global_shader = None
-    batch_plane = None
-    uniform_image = -1
-    shader = None
-
-    # manage draw handler
-    @staticmethod
-    def draw_callback_px(self, context):
-        scene = context.scene
-        aspect_ratio = scene.render.resolution_x / scene.render.resolution_y
-
-        self._update_offscreen(context, self._offscreen)
-        self._opengl_draw(context, self._texture, aspect_ratio, 0.2)
-
-    @staticmethod
-    def handle_add(self, context):
-        VIEW3D_OT_draw_offscreen._handle_draw = bpy.types.SpaceView3D.draw_handler_add(
-            self.draw_callback_px, (self, context),
-            'WINDOW', 'POST_PIXEL',
-        )
-
-    @staticmethod
-    def handle_remove():
-        if VIEW3D_OT_draw_offscreen._handle_draw is not None:
-            bpy.types.SpaceView3D.draw_handler_remove(VIEW3D_OT_draw_offscreen._handle_draw, 'WINDOW')
-
-            VIEW3D_OT_draw_offscreen._handle_draw = None
-
-    # off-screen buffer
-    @staticmethod
-    def _setup_offscreen(context):
-        scene = context.scene
-        aspect_ratio = scene.render.resolution_x / scene.render.resolution_y
-
-        try:
-            offscreen = gpu.types.GPUOffScreen(512, int(512 / aspect_ratio))
-        except Exception as ex:
-            print(ex)
-            offscreen = None
-
-        return offscreen
-
-    @staticmethod
-    def _update_offscreen(context, offscreen):
-        scene = context.scene
-        view_layer = context.view_layer
-        render = scene.render
-        camera = scene.camera
-
-        view_matrix = camera.matrix_world.inverted()
-        projection_matrix = camera.calc_matrix_camera(
-            context.depsgraph,
-            x=render.resolution_x,
-            y=render.resolution_y,
-            scale_x=render.pixel_aspect_x,
-            scale_y=render.pixel_aspect_y,
-        )
-
-        offscreen.draw_view3d(
-            scene,
-            view_layer,
-            context.space_data,
-            context.region,
-            projection_matrix,
-            view_matrix,
-        )
-
-    def _opengl_draw(self, context, texture, aspect_ratio, scale):
-        """
-        OpenGL code to draw a rectangle in the viewport
-        """
-        # view setup
-        bgl.glDisable(bgl.GL_DEPTH_TEST)
-
-        viewport = bgl.Buffer(bgl.GL_INT, 4)
-        bgl.glGetIntegerv(bgl.GL_VIEWPORT, viewport)
-
-        active_texture = bgl.Buffer(bgl.GL_INT, 1)
-        bgl.glGetIntegerv(bgl.GL_TEXTURE_2D, active_texture)
-
-        width = int(scale * viewport[2])
-        height = int(width / aspect_ratio)
-
-        bgl.glViewport(viewport[0], viewport[1], width, height)
-        bgl.glScissor(viewport[0], viewport[1], width, height)
-
-        # draw routine
-        batch_plane = self.get_batch_plane()
-
-        shader = VIEW3D_OT_draw_offscreen.shader
-        # bind it so we can pass the new uniform values
-        shader.bind()
-
-        bgl.glEnable(bgl.GL_TEXTURE_2D)
-        bgl.glActiveTexture(bgl.GL_TEXTURE0)
-        bgl.glBindTexture(bgl.GL_TEXTURE_2D, texture)
-
-        # # TODO, support passing ints
-        # shader.uniform_int(VIEW3D_OT_draw_offscreen.uniform_image, 0)
-        shader.uniform_int("image", 0)
-        batch_plane.draw()
-
-        # restoring settings
-        bgl.glBindTexture(bgl.GL_TEXTURE_2D, active_texture[0])
-        bgl.glDisable(bgl.GL_TEXTURE_2D)
-
-        # reset view
-        bgl.glViewport(viewport[0], viewport[1], viewport[2], viewport[3])
-        bgl.glScissor(viewport[0], viewport[1], viewport[2], viewport[3])
-
-    def get_batch_plane(self):
-        if self.batch_plane is None:
-            global g_plane_vertices
-
-            format = gpu.types.GPUVertFormat()
-            pos_id = format.attr_add(
-                id="pos",
-                comp_type='F32',
-                len=2,
-                fetch_mode='FLOAT',
-            )
-            uv_id = format.attr_add(
-                id="texCoord",
-                comp_type='F32',
-                len=2,
-                fetch_mode='FLOAT',
-            )
-            vbo = gpu.types.GPUVertBuf(
-                len=len(g_plane_vertices),
-                format=format,
-            )
-
-            vbo.attr_fill(id=pos_id, data=g_plane_vertices["pos"])
-            vbo.attr_fill(id=uv_id, data=g_plane_vertices["uv"])
-
-            batch_plane = gpu.types.GPUBatch(type="TRIS", buf=vbo)
-            shader = self.global_shader
-
-            VIEW3D_OT_draw_offscreen.shader = shader
-            VIEW3D_OT_draw_offscreen.uniform_image = shader.uniform_from_name("image")
-
-            batch_plane.program_set(shader)
-            VIEW3D_OT_draw_offscreen.batch_plane = batch_plane
-        return VIEW3D_OT_draw_offscreen.batch_plane
-
-    # operator functions
-    @classmethod
-    def poll(cls, context):
-        return context.area.type == 'VIEW_3D'
-
-    def modal(self, context, event):
-        if context.area:
-            context.area.tag_redraw()
-
-        if event.type in {'RIGHTMOUSE', 'ESC'}:
-            self.cancel(context)
-            return {'CANCELLED'}
-
-        return {'PASS_THROUGH'}
-
-    def invoke(self, context, event):
-        if VIEW3D_OT_draw_offscreen.is_enabled:
-            self.cancel(context)
-            return {'FINISHED'}
-        else:
-            self._offscreen = VIEW3D_OT_draw_offscreen._setup_offscreen(context)
-            if self._offscreen:
-                self._texture = self._offscreen.color_texture
-            else:
-                self.report({'ERROR'}, "Error initializing offscreen buffer. More details in the console")
-                return {'CANCELLED'}
-
-            VIEW3D_OT_draw_offscreen.handle_add(self, context)
-            VIEW3D_OT_draw_offscreen.is_enabled = True
-
-            if context.area:
-                context.area.tag_redraw()
-
-            context.window_manager.modal_handler_add(self)
-            return {'RUNNING_MODAL'}
-
-    def cancel(self, context):
-        VIEW3D_OT_draw_offscreen.handle_remove()
-        VIEW3D_OT_draw_offscreen.is_enabled = False
-
-        if VIEW3D_OT_draw_offscreen.batch_plane is not None:
-            del VIEW3D_OT_draw_offscreen.batch_plane
-            VIEW3D_OT_draw_offscreen.batch_plane = None
-
-        VIEW3D_OT_draw_offscreen.shader = None
-
-        if context.area:
-            context.area.tag_redraw()
-
-
-def register():
-    shader = gpu.types.GPUShader(g_imageVertSrc, g_imageFragSrc)
-    VIEW3D_OT_draw_offscreen.global_shader = shader
-
-    bpy.utils.register_class(VIEW3D_OT_draw_offscreen)
-
-
-def unregister():
-    bpy.utils.unregister_class(VIEW3D_OT_draw_offscreen)
-    VIEW3D_OT_draw_offscreen.global_shader = None
-
-
-if __name__ == "__main__":
-    try:
-        unregister()
-    except RuntimeError:
-        pass
-    else:
-        if hasattr(bpy.types, "VIEW3D_OT_draw_offscreen"):
-            del bpy.types.VIEW3D_OT_draw_offscreen.global_shader
-
-    register()



More information about the Bf-blender-cvs mailing list