Source code for picogl.buffers.vao.configure
"""
VAO attribute configuration
"""
from picogl.backend.modern.core.vertex.buffer.object import ModernVBO
[docs]
def vao_configure_attributes(
attributes: list[tuple[int, int, int, int, bool, int, int]],
):
"""
Enable all vertex attributes associated with this VAO.
:param attributes: A list of tuples where each tuple contains:
- index (int): The attribute index.
- vbo_handle (int): The ID of the vertex buffer object.
- size (int): The number of components per vertex attribute.
- dtype (str): The data type of each component (e.g., 'float').
- normalized (bool): Whether fixed-point data values should be normalized.
- stride (int): The byte offset between consecutive attributes.
- offset (int): The byte offset of the first component.
:raises ValueError: If the structure of any attribute tuple is invalid.
"""
for attribute in attributes:
if len(attribute) != 7:
raise ValueError(
f"Invalid attribute tuple: {attribute}. Expected 7 elements."
)
index, vbo, size, dtype, normalized, stride, offset = attribute
try:
with ModernVBO(vbo) as vbo_object:
vbo_object.set_vertex_attributes(
index=index,
size=size,
dtype=dtype,
normalized=normalized,
stride=stride,
offset=offset,
)
vbo_object.configure()
except Exception as ex:
# Log or re-raise the exception with more context
raise RuntimeError(
f"Failed to configure vertex attribute at index {index}"
) from ex