@@ -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