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-12 19:53:45 +0300
committerJacques Lucke <mail@jlucke.com>2018-11-12 19:54:51 +0300
commit15a5cc6ca0b93a923e1bfd25850d3d645aaa43b5 (patch)
tree588817835fe92f69d1445d2dfddb6cc66b26e4e4 /doc
parentc34c688b47521226503052616e8c1961b4d81acf (diff)
Py API Docs: another use case for offscreen rendering
Diffstat (limited to 'doc')
-rw-r--r--doc/python_api/examples/gpu.8.py1
-rw-r--r--doc/python_api/examples/gpu.9.py52
2 files changed, 53 insertions, 0 deletions
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