[Bf-blender-cvs] [0264c050bf2] blender2.8: PyAPI: gpu utility module to create new batches
Jacques Lucke
noreply at git.blender.org
Fri Oct 26 03:42:56 CEST 2018
Commit: 0264c050bf277494a187b32d51be13b0760f81c0
Author: Jacques Lucke
Date: Fri Oct 26 12:38:04 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB0264c050bf277494a187b32d51be13b0760f81c0
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
===================================================================
M release/scripts/modules/gpu_extras/__init__.py
A release/scripts/modules/gpu_extras/batch.py
===================================================================
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)
More information about the Bf-blender-cvs
mailing list