X-Git-Url: http://git.tdb.fi/?p=gldbg.git;a=blobdiff_plain;f=generate.py;h=4b6bb7902c7187f493a8868d9e2c07b17b2865b7;hp=0f9c5697085432066fc1de45ceb068a0e6a98fbe;hb=HEAD;hpb=5cf4479b591bce68657a938b201114680839ec92 diff --git a/generate.py b/generate.py index 0f9c569..4b6bb79 100755 --- a/generate.py +++ b/generate.py @@ -1,5 +1,4 @@ #!/usr/bin/python -# $Id$ import sys import os @@ -146,10 +145,6 @@ class Function: if (s.type=="SizeI" or s.type.endswith("Int32") or s.type.startswith("BufferSize")): if s.kind=="value": self.csize = "%s"%self.size - if self.func.name.startswith("glUniformMatrix") and self.func.name[16]!='x': - self.csize += "*%d"%(int(self.func.name[15])**2) - elif self.func.name.startswith("glUniform") and self.func.name[9].isdigit(): - self.csize += "*%s"%self.func.name[9] if strip_name(self.base_ctype)!="void": self.csize += "*sizeof(%s)"%self.base_ctype elif s.kind=="array" and s.size==1: @@ -307,6 +302,8 @@ class Template: iomap = IOmap(api.iomap) for spec in api.specs: funcs = read_spec(spec, api.prefix) + for err in api.errata: + read_spec(err, api.prefix, funcs) funcs = [f for f in funcs if f.name not in api.ignore_funcs and f.category not in api.ignore_categs] for func in funcs: func.finalize(typemap, iomap) @@ -328,24 +325,29 @@ class Api: self.typemap = None self.iomap = None self.specs = [] + self.errata = [] self.prefix = None self.enumspecs = [] self.enumprefix = None self.ignore_categs = [] self.ignore_funcs = [] + path = os.path.split(fn)[0] + for line in InputFile(fn): parts = line.split() if parts[0]=="typemap": - self.typemap = parts[1] + self.typemap = os.path.join(path, parts[1]) elif parts[0]=="iomap": - self.iomap = parts[1] + self.iomap = os.path.join(path, parts[1]) elif parts[0]=="spec": - self.specs.append(parts[1]) + self.specs.append(os.path.join(path, parts[1])) + elif parts[0]=="errata": + self.errata.append(os.path.join(path, parts[1])) elif parts[0]=="prefix": self.prefix = parts[1] elif parts[0]=="enumspec": - self.enumspecs.append(parts[1]) + self.enumspecs.append(os.path.join(path, parts[1])) elif parts[0]=="enumprefix": self.enumprefix = parts[1] elif parts[0]=="ignore": @@ -357,8 +359,9 @@ class Api: sys.stderr.write("Unknown keyword '%s'\n", parts[0]) -def read_spec(fn, prefix): - funcs = [] +def read_spec(fn, prefix, funcs=None): + if funcs is None: + funcs = [] cur_func = None for line in InputFile(fn): @@ -390,8 +393,15 @@ def read_spec(fn, prefix): pnames = [n.strip() for n in line[paren+1:cparen].split(",")] else: pnames = [] - cur_func = Function(prefix+line[:paren], pnames) - funcs.append(cur_func) + fname = prefix+line[:paren] + cur_func = None + for f in funcs: + if f.name==fname: + cur_func = f + break + if not cur_func: + cur_func = Function(prefix+line[:paren], pnames) + funcs.append(cur_func) return funcs