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
diff options
context:
space:
mode:
authorJacques Lucke <mail@jlucke.com>2018-10-26 04:38:04 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-10-26 04:40:43 +0300
commit0264c050bf277494a187b32d51be13b0760f81c0 (patch)
tree5b76769008973c3d9145dc5cd7ca91f760cce78c /release/scripts/modules/gpu_extras
parentca8fee62abc17fd514994c1c0bf34a3234be902a (diff)
PyAPI: gpu utility module to create new batches
Support the common case of creating batches from python geometry, a shader and optionally indices. See D3779
Diffstat (limited to 'release/scripts/modules/gpu_extras')
-rw-r--r--release/scripts/modules/gpu_extras/__init__.py1
-rw-r--r--release/scripts/modules/gpu_extras/batch.py62
2 files changed, 63 insertions, 0 deletions
diff --git a/release/scripts/modules/gpu_extras/__init__.py b/release/scripts/modules/gpu_extras/__init__.py
index 221c7e2da58..7448113e2fa 100644
--- a/release/scripts/modules/gpu_extras/__init__.py
+++ b/release/scripts/modules/gpu_extras/__init__.py
@@ -17,5 +17,6 @@
# ***** END GPL LICENSE BLOCK *****
__all__ = (
+ "batch",
"presets",
)
diff --git a/release/scripts/modules/gpu_extras/batch.py b/release/scripts/modules/gpu_extras/batch.py
new file mode 100644
index 00000000000..6a403a66089
--- /dev/null
+++ b/release/scripts/modules/gpu_extras/batch.py
@@ -0,0 +1,62 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+__all__ = (
+ "batch_for_shader"
+)
+
+
+def batch_for_shader(shader, type, content, indices=None):
+ """
+ Return a batch already configured and compatible with the shader.
+
+ :arg shader: shader for which a compatible format will be computed.
+ :type shader: :class:`gpu.types.GPUShader`
+ :arg type: "'POINTS', 'LINES', 'TRIS' or 'LINES_ADJ'".
+ :type type: str
+ :arg content: Maps the name of the shader attribute with the data to fill the vertex buffer.
+ :type content: dict
+ :return: compatible batch
+ :rtype: :class:`gpu.types.Batch`
+ """
+ import gpu
+ from gpu.types import (
+ GPUBatch,
+ GPUIndexBuf,
+ GPUVertBuf,
+ )
+
+ for data in content.values():
+ vbo_len = len(data)
+ break
+ else:
+ raise ValueError("Empty 'content'")
+
+ vbo_format = shader.format_calc()
+ vbo = GPUVertBuf(vbo_format, vbo_len)
+
+ for id, data in content.items():
+ if len(data) != vbo_len:
+ raise ValueError("Length mismatch for 'content' values")
+ vbo.attr_fill(id, data)
+
+ if indices is None:
+ return GPUBatch(type=type, buf=vbo)
+ else:
+ ibo = GPUIndexBuf(type=type, seq=indices)
+ return GPUBatch(type=type, buf=vbo, elem=ibo)