class Function(Thing):
def __init__(self, name):
Thing.__init__(self, name, Thing.FUNCTION)
+ self.return_type = "void"
+ self.params = []
self.typedef = None
self.vectorequiv = None
root = doc.documentElement
commands = get_nested_elements(root, "commands/command")
for cmd in commands:
- name = get_text_contents(get_nested_elements(cmd, "proto/name")[0])
+ proto = cmd.getElementsByTagName("proto")[0]
+ name = get_text_contents(proto.getElementsByTagName("name")[0])
func = things.get(name)
if not func:
func = Function(name)
if vec:
func.vectorequiv = vec[0].getAttribute("name")
+ ptype = proto.getElementsByTagName("ptype")
+ if ptype:
+ func.return_type = get_text_contents(ptype[0])
+ else:
+ for c in proto.childNodes:
+ if c.nodeType==xml.dom.Node.TEXT_NODE and c.data.strip():
+ func.return_type = c.data.strip()
+ break
+
+ params = cmd.getElementsByTagName("param")
+ for p in params:
+ func.params.append(get_text_contents(p))
+
enums = get_nested_elements(root, "enums/enum")
for en in enums:
name = en.getAttribute("name")
if funcs or enums:
out.write("\n#ifndef GL_%s\n"%ext)
for f in funcs:
- out.write("typedef int (*%s)(...);\n"%f.typedef)
+ out.write("typedef %s (*%s)(%s);\n"%(f.return_type, f.typedef, ", ".join(f.params)))
if funcs and enums:
out.write("\n")
for e in enums:
out.write("#define %s 0x%04X\n"%(e.name, e.value))
out.write("#endif\n\n")
+
+ # Apple's OpenGL implementation doesn't have a GetProcAddress function; link
+ # directly to the OpenGL library
+ out.write("\n#if !defined(__APPLE__) || !defined(GL_%s)\n"%ext)
for f in funcs:
out.write("extern %s %s;\n"%(f.typedef, f.name))
+ out.write("#endif\n")
out.write("\nextern Extension %s;\n"%ext)
""")
if funcs:
- out.write("\n")
-for f in funcs:
- out.write("%s %s = 0;\n"%(f.typedef, f.name))
+ out.write("\n#if !defined(__APPLE__) || !defined(GL_%s)\n"%ext)
+ for f in funcs:
+ out.write("%s %s = 0;\n"%(f.typedef, f.name))
+ out.write("\n#endif\n")
out.write("\nExtension::SupportLevel init_%s()\n{\n"%ext.lower())
out.write("#ifdef GL_%s\n"%ext)
if backport_ext:
out.write(" || is_supported(\"GL_%s\")"%backport_ext)
out.write(")\n\t{\n")
- for f in funcs:
- out.write("\t\t%s = reinterpret_cast<%s>(get_proc_address(\"%s\"));\n"%(f.name, f.typedef, f.name))
+ if funcs:
+ out.write("#ifndef __APPLE__\n")
+ for f in funcs:
+ out.write("\t\t%s = reinterpret_cast<%s>(get_proc_address(\"%s\"));\n"%(f.name, f.typedef, f.name))
+ out.write("#endif\n")
out.write("\t\treturn Extension::CORE;\n")
out.write("\t}\n")
if ext!=backport_ext:
out.write("\tif(is_supported(\"GL_%s\"))\n\t{\n"%(ext))
- for f in funcs:
- n = f.name
- if f.source:
- n = f.source.name
- out.write("\t\t%s = reinterpret_cast<%s>(get_proc_address(\"%s\"));\n"%(f.name, f.typedef, n))
+ if funcs:
+ out.write("#ifndef __APPLE__\n")
+ for f in funcs:
+ n = f.name
+ if f.source:
+ n = f.source.name
+ out.write("\t\t%s = reinterpret_cast<%s>(get_proc_address(\"%s\"));\n"%(f.name, f.typedef, n))
+ out.write("#endif\n")
out.write("\t\treturn Extension::EXTENSION;\n")
out.write("\t}\n")
out.write("#endif\n")