This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/release/scripts/modules/gpu_extras/batch.py
Campbell Barton c434782e3a File headers: SPDX License migration
Use a shorter/simpler license convention, stops the header taking so
much space.

Follow the SPDX license specification: https://spdx.org/licenses

- C/C++/objc/objc++
- Python
- Shell Scripts
- CMake, GNUmakefile

While most of the source tree has been included

- `./extern/` was left out.
- `./intern/cycles` & `./intern/atomic` are also excluded because they
  use different header conventions.

doc/license/SPDX-license-identifiers.txt has been added to list SPDX all
used identifiers.

See P2788 for the script that automated these edits.

Reviewed By: brecht, mont29, sergey

Ref D14069
2022-02-11 09:14:36 +11:00

46 lines
1.3 KiB
Python

# SPDX-License-Identifier: GPL-2.0-or-later
__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`
"""
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)