Added the ability to get the size of a parameter as a string. Changed the

meaning of "variable length array" to include variables that are "counted"
instead of just ones that use an enum to map to a count.  Added glParameter
to the glItemFactory.
This commit is contained in:
Ian Romanick 2004-12-01 00:29:48 +00:00
parent 9001d67309
commit 4f0a75e724

View file

@ -193,7 +193,7 @@ class glParameter( glItem ):
to glCallLists, are not variable length arrays in this
sense."""
return self.p_count_parameters != None
return (self.p_count_parameters != None) or (self.counter != None)
def is_array(self):
@ -211,7 +211,7 @@ class glParameter( glItem ):
glDeleteTextures), or a general variable length vector."""
if self.is_array():
if self.is_variable_length_array():
if self.p_count_parameters != None:
return "compsize"
elif self.counter != None:
return self.counter
@ -222,13 +222,32 @@ class glParameter( glItem ):
def size(self):
if self.is_variable_length_array():
if self.p_count_parameters != None or self.counter != None or self.is_output:
return 0
elif self.p_count == 0:
return self.p_type.size
else:
return self.p_type.size * self.p_count
def size_string(self):
s = self.size()
if s == 0:
a_prod = "compsize"
b_prod = self.p_type.size
if self.p_count_parameters == None and self.counter != None:
a_prod = self.counter
elif self.p_count_parameters != None and self.counter == None:
pass
elif self.p_count_parameters != None and self.counter != None:
b_prod = self.counter
else:
raise RuntimeError("Parameter '%s' to function '%s' has size 0." % (self.name, self.context.name))
return "(%s * %s)" % (a_prod, b_prod)
else:
return str(s)
class glParameterIterator:
"""Class to iterate over a list of glParameters.
@ -283,7 +302,7 @@ class glFunction( glItem ):
def startElement(self, name, attrs):
if name == "param":
try:
glParameter(self, name, attrs)
self.context.factory.create(self, name, attrs)
except RuntimeError:
print "Error with parameter '%s' in function '%s'." \
% (attrs.get('name','(unknown)'), self.name)
@ -326,6 +345,8 @@ class glItemFactory:
return glType(context, name, attrs)
elif name == "enum":
return glEnum(context, name, attrs)
elif name == "param":
return glParameter(context, name, attrs)
else:
return None