[Bf-blender-cvs] [15a5cc6ca0b] blender2.8: Py API Docs: another use case for offscreen rendering
Jacques Lucke
noreply at git.blender.org
Mon Nov 12 17:55:19 CET 2018
Commit: 15a5cc6ca0b93a923e1bfd25850d3d645aaa43b5
Author: Jacques Lucke
Date: Mon Nov 12 17:53:45 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB15a5cc6ca0b93a923e1bfd25850d3d645aaa43b5
Py API Docs: another use case for offscreen rendering
===================================================================
M doc/python_api/examples/gpu.8.py
A doc/python_api/examples/gpu.9.py
===================================================================
diff --git a/doc/python_api/examples/gpu.8.py b/doc/python_api/examples/gpu.8.py
index 187276d61f5..7e41164fc7e 100644
--- a/doc/python_api/examples/gpu.8.py
+++ b/doc/python_api/examples/gpu.8.py
@@ -23,6 +23,7 @@ offscreen.bind()
try:
bgl.glClear(bgl.GL_COLOR_BUFFER_BIT)
with gpu.matrix.push_pop():
+ # reset matrices -> use normalized device coordinates [-1, 1]
gpu.matrix.load_matrix(Matrix.Identity(4))
gpu.matrix.load_projection_matrix(Matrix.Identity(4))
diff --git a/doc/python_api/examples/gpu.9.py b/doc/python_api/examples/gpu.9.py
new file mode 100644
index 00000000000..a281534765a
--- /dev/null
+++ b/doc/python_api/examples/gpu.9.py
@@ -0,0 +1,52 @@
+"""
+Copy Offscreen Rendering result back to RAM
+-------------------------------------------
+
+This will create a new image with the given name.
+If it already exists, it will override the existing one.
+
+Currently almost all of the execution time is spent in the last line.
+In the future this will hopefully be solved by implementing the Python buffer protocol for `bgl.Buffer` and `Image.pixels` (aka `bpy_prop_array`).
+"""
+import bpy
+import gpu
+import bgl
+import random
+from mathutils import Matrix
+from gpu_extras.presets import draw_circle_2d
+
+IMAGE_NAME = "Generated Image"
+WIDTH = 512
+HEIGHT = 512
+RING_AMOUNT = 10
+
+
+offscreen = gpu.types.GPUOffScreen(WIDTH, HEIGHT)
+
+offscreen.bind()
+try:
+ bgl.glClear(bgl.GL_COLOR_BUFFER_BIT)
+ with gpu.matrix.push_pop():
+ # reset matrices -> use normalized device coordinates [-1, 1]
+ gpu.matrix.load_matrix(Matrix.Identity(4))
+ gpu.matrix.load_projection_matrix(Matrix.Identity(4))
+
+ for i in range(RING_AMOUNT):
+ draw_circle_2d(
+ (random.uniform(-1, 1), random.uniform(-1, 1)),
+ (1, 1, 1, 1), random.uniform(0.1, 1), 20)
+
+
+ buffer = bgl.Buffer(bgl.GL_BYTE, WIDTH * HEIGHT * 4)
+ bgl.glReadBuffer(bgl.GL_BACK)
+ bgl.glReadPixels(0, 0, WIDTH, HEIGHT, bgl.GL_RGBA, bgl.GL_UNSIGNED_BYTE, buffer)
+finally:
+ offscreen.unbind()
+ offscreen.free()
+
+
+if not IMAGE_NAME in bpy.data.images:
+ bpy.data.images.new(IMAGE_NAME, WIDTH, HEIGHT)
+image = bpy.data.images[IMAGE_NAME]
+image.scale(WIDTH, HEIGHT)
+image.pixels = [v / 255 for v in buffer]
\ No newline at end of file
More information about the Bf-blender-cvs
mailing list