#!/usr/bin/python
import sys
+import os
if len(sys.argv)<2:
print """Usage:
sys.exit(0)
ext = sys.argv[1]
+out_base = None
+if ext.endswith(".glext"):
+ fn = ext
+ ext = None
+ ver = None
+ secondary = []
+ for line in open(fn):
+ parts = line.split()
+ if parts[0]=="extension":
+ ext = parts[1]
+ elif parts[0]=="core_version":
+ ver = parts[1]
+ elif parts[0]=="secondary":
+ secondary.append(parts[1])
+ if len(sys.argv)>=3:
+ out_base = os.path.splitext(sys.argv[2])[0]
+else:
+ secondary = sys.argv[2:]
+ ver = None
+ if secondary and secondary[0][0].isdigit():
+ ver = secondary.pop(0)
+
exttype = ext.split('_')[0]
-secondary = sys.argv[2:]
-ver = None
-if secondary and secondary[0][0].isdigit():
- ver = secondary.pop(0)
bp_ext = None
+if not out_base:
+ out_base = ext.lower()
+
class Function:
def __init__(self, name):
self.name = name
+ self.typedef = None
self.version = None
self.category = None
self.vectorequiv = None
for f in funcs:
if f.extfunc:
+ f.typedef = "PFNGL%sPROC"%f.extfunc.name.upper()
if not ver:
ver = f.version
if not f.category.startswith("VERSION_"):
bp_ext = f.category
- if not f.extfunc and not f.name.endswith(exttype):
- bp_ext = f.category
+ else:
+ f.typedef = "PFNGL%sPROC"%f.name.upper()
+ if not f.name.endswith(exttype):
+ bp_ext = f.category
if ver:
ver = map(int, ver.split('.'))
-out = file(ext.lower()+".h", "w")
+out = file(out_base+".h", "w")
out.write("#ifndef MSP_GL_%s_\n"%ext.upper())
out.write("#define MSP_GL_%s_\n"%ext.upper())
out.write("""
-#include "extension.h"
-#include "gl.h"
+#include <msp/gl/extension.h>
+#include <msp/gl/gl.h>
#include <GL/glext.h>
namespace Msp {
if funcs:
out.write("\n")
for f in funcs:
- out.write("extern PFNGL%sPROC gl%s;\n"%(f.name.upper(), f.name))
+ out.write("extern %s gl%s;\n"%(f.typedef, f.name))
out.write("\nextern Extension %s;\n"%ext)
#endif
""")
-out = file(ext.lower()+".cpp", "w")
+out = file(out_base+".cpp", "w")
out.write("#include \"%s.h\"\n"%ext.lower())
out.write("""
if funcs:
out.write("\n")
for f in funcs:
- out.write("PFNGL%sPROC gl%s = 0;\n"%(f.name.upper(), f.name))
+ out.write("%s gl%s = 0;\n"%(f.typedef, f.name))
out.write("\nExtension::SupportLevel init_%s()\n{\n"%ext.lower())
if ver:
out.write(" || is_supported(\"GL_%s\")"%bp_ext)
out.write(")\n\t{\n")
for f in funcs:
- out.write("\t\tgl%s = reinterpret_cast<PFNGL%sPROC>(get_proc_address(\"gl%s\"));\n"%(f.name, f.name.upper(), f.name))
+ out.write("\t\tgl%s = reinterpret_cast<%s>(get_proc_address(\"gl%s\"));\n"%(f.name, f.typedef, f.name))
out.write("\t\treturn Extension::CORE;\n")
out.write("\t}\n")
if ext!=bp_ext:
n = f.name
if f.extfunc:
n = f.extfunc.name
- out.write("\t\tgl%s = reinterpret_cast<PFNGL%sPROC>(get_proc_address(\"gl%s\"));\n"%(f.name, f.name.upper(), n))
+ out.write("\t\tgl%s = reinterpret_cast<%s>(get_proc_address(\"gl%s\"));\n"%(f.name, f.typedef, n))
out.write("\t\treturn Extension::EXTENSION;\n")
out.write("\t}\n")
out.write("\treturn Extension::UNSUPPORTED;\n")