Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorJacques Lucke <mail@jlucke.com>2018-11-13 18:43:17 +0300
committerJacques Lucke <mail@jlucke.com>2018-11-13 18:43:17 +0300
commit9caa587519b40e3fb2479d16328f91042d9eaeee (patch)
tree02e7bb27078ac37f56eb89554248bff2f6925d36 /doc
parent3aa30406dd0f862f8360741ff77118505aa93302 (diff)
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.
Diffstat (limited to 'doc')
-rw-r--r--doc/python_api/examples/gpu.types.GPUOffScreen.py267
1 files changed, 0 insertions, 267 deletions
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()