Cleanup: unused imports
[blender.git] / release / scripts / modules / gpu_extras / batch.py
1 # ***** BEGIN GPL LICENSE BLOCK *****
2 #
3 # This program is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU General Public License
5 # as published by the Free Software Foundation; either version 2
6 # of the License, or (at your option) any later version.
7 #
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 # GNU General Public License for more details.
12 #
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software Foundation,
15 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # ***** END GPL LICENSE BLOCK *****
18
19 __all__ = (
20     "batch_for_shader",
21 )
22
23
24 def batch_for_shader(shader, type, content, indices=None):
25     """
26     Return a batch already configured and compatible with the shader.
27
28     :arg shader: shader for which a compatible format will be computed.
29     :type shader: :class:`gpu.types.GPUShader`
30     :arg type: "'POINTS', 'LINES', 'TRIS' or 'LINES_ADJ'".
31     :type type: str
32     :arg content: Maps the name of the shader attribute with the data to fill the vertex buffer.
33     :type content: dict
34     :return: compatible batch
35     :rtype: :class:`gpu.types.Batch`
36     """
37     from gpu.types import (
38         GPUBatch,
39         GPUIndexBuf,
40         GPUVertBuf,
41     )
42
43     for data in content.values():
44         vbo_len = len(data)
45         break
46     else:
47         raise ValueError("Empty 'content'")
48
49     vbo_format = shader.format_calc()
50     vbo = GPUVertBuf(vbo_format, vbo_len)
51
52     for id, data in content.items():
53         if len(data) != vbo_len:
54             raise ValueError("Length mismatch for 'content' values")
55         vbo.attr_fill(id, data)
56
57     if indices is None:
58         return GPUBatch(type=type, buf=vbo)
59     else:
60         ibo = GPUIndexBuf(type=type, seq=indices)
61         return GPUBatch(type=type, buf=vbo, elem=ibo)