7 extgen.py <extension> [<version>] [<secondary> ...]"
9 Reads gl.spec and generates files to use <extension>. Any promoted functions
10 are exposed with their promoted names. If <secondary> extensions are given,
11 any promoted functions from those are pulled in as well. <version> can be
12 given to override the version where <extension> was promoted to core."""
16 exttype = ext.split('_')[0]
17 secondary = sys.argv[2:]
19 if secondary and secondary[0][0].isdigit():
20 ver = secondary.pop(0)
24 def __init__(self, name):
28 self.vectorequiv = None
37 if line[0]=='#' or line.find(':')>=0:
42 if parts[0]=="category":
43 cur_func.category = parts[1]
44 elif parts[0]=="vectorequiv":
45 cur_func.vectorequiv = parts[1]
46 elif parts[0]=="alias":
47 cur_func.aliases.append(parts[1])
48 elif parts[0]=="version":
49 cur_func.version = parts[1]
50 elif parts[0]=="delete":
51 del funcs[cur_func.name]
54 paren = line.find('(')
58 cur_func = funcs[name]
60 cur_func = Function(name)
61 funcs[name] = cur_func
64 parse_file("gl.spec.fixes")
66 for f in funcs.itervalues():
67 if f.category==ext or f.category in secondary:
68 if not f.aliases and f.vectorequiv:
69 for g in funcs.itervalues():
70 if g!=f and g.vectorequiv==f.vectorequiv and f.name.startswith(g.name):
71 f.aliases.append(g.name)
79 if f.category==ext and not f.aliases:
83 if e.category==ext or e.category in secondary:
87 funcs = [f for f in funcs.itervalues() if is_relevant(f)]
88 funcs.sort(key=(lambda f: f.name))
94 if not f.category.startswith("VERSION_"):
96 if not f.extfunc and not f.name.endswith(exttype):
100 ver = map(int, ver.split('.'))
102 out = file(ext.lower()+".h", "w")
103 out.write("#ifndef MSP_GL_%s_\n"%ext.upper())
104 out.write("#define MSP_GL_%s_\n"%ext.upper())
107 #include "extension.h"
109 #include <GL/glext.h>
118 out.write("extern PFNGL%sPROC gl%s;\n"%(f.name.upper(), f.name))
120 out.write("\nextern Extension %s;\n"%ext)
129 out = file(ext.lower()+".cpp", "w")
130 out.write("#include \"%s.h\"\n"%ext.lower())
140 out.write("PFNGL%sPROC gl%s = 0;\n"%(f.name.upper(), f.name))
142 out.write("\nExtension::SupportLevel init_%s()\n{\n"%ext.lower())
144 out.write("\tif(is_version_at_least(%d, %d)"%tuple(ver))
146 out.write(" || is_supported(\"GL_%s\")"%bp_ext)
147 out.write(")\n\t{\n")
149 out.write("\t\tgl%s = reinterpret_cast<PFNGL%sPROC>(get_proc_address(\"gl%s\"));\n"%(f.name, f.name.upper(), f.name))
150 out.write("\t\treturn Extension::CORE;\n")
153 out.write("\tif(is_supported(\"GL_%s\"))\n\t{\n"%(ext))
158 out.write("\t\tgl%s = reinterpret_cast<PFNGL%sPROC>(get_proc_address(\"gl%s\"));\n"%(f.name, f.name.upper(), n))
159 out.write("\t\treturn Extension::EXTENSION;\n")
161 out.write("\treturn Extension::UNSUPPORTED;\n")
164 out.write("\nExtension %s(\"GL_%s\", init_%s);\n"%(ext, ext, ext.lower()))