else:
source_ext = None
+if funcs or enums:
+ any_supported = False
+ all_supported = True
+ for t in itertools.chain(funcs, enums):
+ if target_api in t.supported_apis:
+ any_supported = True
+ else:
+ all_supported = False
+
+ if not any_supported:
+ print "Warning: %s is not supported by the target API"%target_ext.name
+ elif not all_supported:
+ print "Warning: %s is only partially supported by the target API"%target_ext.name
+ unsupported = ""
+ label = "Warning: Unsupported tokens: "
+ for t in itertools.chain(funcs, enums):
+ if target_api not in t.supported_apis:
+ if unsupported and len(label)+len(unsupported)+2+len(t.name)>78:
+ print label+unsupported
+ label = " "*len(label)
+ unsupported = ""
+ if unsupported:
+ unsupported += ", "
+ unsupported += t.name
+ if unsupported:
+ print label+unsupported
+
### Output ###
out = file(out_base+".h", "w")
if funcs or enums:
if funcs:
for f in funcs:
- out.write("typedef %s (*%s)(%s);\n"%(f.return_type, f.typedef, ", ".join(f.params)))
+ out.write("typedef %s (APIENTRY *%s)(%s);\n"%(f.return_type, f.typedef, ", ".join(f.params)))
out.write("\n")
if enums:
if funcs:
out.write("""
#ifdef __APPLE__
-#define GET_PROC_ADDRESS(x) ::x
+#define GET_PROC_ADDRESS(x) &::x
#else
#define GET_PROC_ADDRESS(x) get_proc_address(#x)
#endif
+
+#ifdef WIN32
+#define GET_PROC_ADDRESS_1_1(x) &::x
+#else
+#define GET_PROC_ADDRESS_1_1(x) GET_PROC_ADDRESS(x)
+#endif
""")
out.write("""
namespace Msp {
out.write(" || is_supported(\"GL_%s\")"%backport_ext.name)
out.write(")\n\t{\n")
for f in funcs:
- if f.version or target_api in f.supported_apis:
- out.write("\t\t%s = reinterpret_cast<%s>(GET_PROC_ADDRESS(%s));\n"%(f.name, f.typedef, f.name))
+ if target_api in f.supported_apis:
+ gpa_suffix = ""
+ if f.version<=[1, 1]:
+ gpa_suffix = "_1_1"
+ out.write("\t\t%s = reinterpret_cast<%s>(GET_PROC_ADDRESS%s(%s));\n"%(f.name, f.typedef, gpa_suffix, f.name))
out.write("\t\treturn Extension::CORE;\n")
out.write("\t}\n")
if source_ext and source_ext!=backport_ext:
s = f
if f.sources:
s = f.sources[0]
- if s.version or target_api in s.supported_apis:
+ if target_api in s.supported_apis:
out.write("\t\t%s = reinterpret_cast<%s>(GET_PROC_ADDRESS(%s));\n"%(f.name, f.typedef, s.name))
out.write("\t\treturn Extension::EXTENSION;\n")
out.write("\t}\n")