X-Git-Url: http://git.tdb.fi/?p=gldbg.git;a=blobdiff_plain;f=genwrap.py;h=07dd914f09d20b9a5bcda4adf6fa2000f33caf52;hp=ec239853875a386fdca9a4961b733a77622177c5;hb=9cdca19aa017ea1711436977855e885d91e78ab0;hpb=53c5f5f90611ce35d13f7051b26ac482d1336fc5 diff --git a/genwrap.py b/genwrap.py index ec23985..07dd914 100755 --- a/genwrap.py +++ b/genwrap.py @@ -125,11 +125,11 @@ class Function: if self.kind=="value": if self.base_ctype.startswith("const "): self.base_ctype = self.base_ctype[6:] - self.io = iomap[self.base_ctype] else: if self.direction=="in": self.ctype = "const "+self.ctype self.ctype = self.ctype+" *" + self.io = iomap[self.base_ctype] def derive_csize(self): if self.kind=="array" and self.size is not None: @@ -138,14 +138,21 @@ class Function: self.csize = "%d*sizeof(%s)"%(self.size, self.base_ctype) elif self.size.startswith("COMPSIZE("): self.csize = self.func.compsize(self.size[9:-1], self.base_ctype) - elif self.size=="" and (self.type=="charARB" or self.type=="Char"): - self.csize = "strlen" + elif self.size=="pname": + self.csize = "paramsize(pname)*sizeof(%s)"%self.base_ctype else: s = self.func.get_param(self.size.split('*')[0]) - if (s.type=="SizeI" or s.type.endswith("Int32") or s.type.startswith("BufferSize")) and s.kind=="value": - self.csize = "%s*sizeof(%s)"%(self.size, self.base_ctype) - if self.func.name.startswith("Uniform") and self.func.name[7].isdigit(): - self.csize += "*%s"%func.name[7] + 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: + self.csize = "*%s"%s.name if not self.csize: sys.stderr.write("Could not determine size for array parameter '%s[%s]' of function '%s'\n"%(self.name, self.size, self.func.name)) elif self.kind=="reference": @@ -187,17 +194,17 @@ class Function: have_type = True elif cn.endswith("Format"): res += "formatsize(%s)"%param.name - elif cn.endswith(("Parameter", "ParameterPName", "ParameterName")) or cn=="GetPName": + elif param.name=="pname" or cn.endswith("Parameter") or (param.name=="target" and cn=="enum"): res += "paramsize(%s)"%param.name - elif cn=="MapTarget": - res += "mapsize(%s)"%param.name + elif param.name=="buffer" and cn=="enum": + res += "buffersize(%s)"%param.name elif (cn=="SizeI" or cn.endswith("Int32")) and not param.size: res += param.name else: sys.stderr.write("Compsize '%s' for function '%s' failed: Parameter '%s' has unknown type '%s'\n"%(size, self.name, param.name, param.type)) return if not have_type: - res += "*sizeof(%s)"%param.ctype + res += "*sizeof(%s)"%btype return res def finalize(self): @@ -211,6 +218,7 @@ class Function: class Template: def __init__(self, fn): self.sections = [] + self.handcode = [] literal = True text = "" @@ -221,6 +229,10 @@ class Template: text = "" text += line[1:]+"\n" literal = True + elif line[0]=='!': + parts = line[1:].split() + if parts[0]=="handcode": + self.handcode.append(parts[1]) else: if literal and text: self.add_section(text, literal) @@ -248,6 +260,8 @@ class Template: print sect else: for func in functions: + if func.name in self.handcode: + continue globals = { "w": self.write, "wl": self.writeln,