diff --git a/doc/python_api/examples/gpu.10.py b/doc/python_api/examples/gpu.10.py new file mode 100644 index 00000000000..aa5574c44bb --- /dev/null +++ b/doc/python_api/examples/gpu.10.py @@ -0,0 +1,38 @@ +""" +Rendering the 3D View into a Texture +------------------------------------ + +The scene has to have a camera for this example to work. +You could also make this independent of a specific camera, but Blender does not expose good functions to create view and projection matrices yet. +""" +import bpy +import bgl +import gpu +from gpu_extras.presets import draw_texture_2d + +WIDTH = 512 +HEIGHT = 256 + +offscreen = gpu.types.GPUOffScreen(WIDTH, HEIGHT) + +def draw(): + context = bpy.context + scene = context.scene + + view_matrix = scene.camera.matrix_world.inverted() + + projection_matrix = scene.camera.calc_matrix_camera( + context.depsgraph, x=WIDTH, y=HEIGHT) + + offscreen.draw_view3d( + scene, + context.view_layer, + context.space_data, + context.region, + view_matrix, + projection_matrix) + + bgl.glDisable(bgl.GL_DEPTH_TEST) + draw_texture_2d(offscreen.color_texture, (10, 10), WIDTH, HEIGHT) + +bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_PIXEL') \ No newline at end of file