Skip to content

Commit 9338bc3

Browse files
committed
Sanity check byte and element size of array buffers in VAO
1 parent 0cc293a commit 9338bc3

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

demosys/opengl/vao.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ def __init__(self, format, vbo):
1212
self.format = format
1313
self.vbo = vbo
1414
self.stride = 0
15+
self.element_size = type_size(self.format)
16+
if self.size % self.element_size != 0:
17+
raise VAOError("Buffer with type {} has size not aligning with {}. Remainder: ".format(
18+
self.format, self.element_size, self.size % self.element_size,
19+
))
20+
self.elements = self.size // self.element_size
1521

1622
@property
1723
def target(self):
@@ -100,12 +106,12 @@ def draw(self, mode=None):
100106
if self.element_buffer:
101107
if mode is not None:
102108
GL.glDrawElements(mode,
103-
self.element_buffer.size // 4, # 4b per int
109+
self.element_buffer.elements, # 4b per int
104110
self.element_buffer.format,
105111
self.element_buffer.vbo)
106112
else:
107113
GL.glDrawElements(self.mode,
108-
self.element_buffer.size // 4, # 4b per int
114+
self.element_buffer.elements, # 4b per int
109115
self.element_buffer.format,
110116
self.element_buffer.vbo)
111117
else:
@@ -230,3 +236,12 @@ def __enter__(self):
230236

231237
def __exit__(self, exc_type, exc_val, exc_tb):
232238
pass
239+
240+
241+
def type_size(format):
242+
"""Determines the byte size of a format"""
243+
if format == GL.GL_FLOAT:
244+
return 4
245+
if format == GL.GL_UNSIGNED_INT:
246+
return 4
247+
raise VAOError("Cannot determine byte size of {}".format(format))

0 commit comments

Comments
 (0)