target_ext = sys.argv[i]
backport_ext = None
+deprecated_version = None
out_base = None
ignore_things = []
if target_ext.endswith(".glext"):
elif parts[0]=="core_version":
if parts[1]==target_api:
core_version = parts[2]
+ elif parts[0]=="deprecated":
+ if parts[1]==target_api:
+ deprecated_version = parts[2]
elif parts[0]=="secondary":
secondary.append(parts[1])
elif parts[0]=="backport":
if core_version:
core_version = map(int, core_version.split('.'))
+if deprecated_version:
+ deprecated_version = map(int, deprecated_version.split('.'))
+
if not out_base:
out_base = target_ext.lower()
self.name = name
self.kind = kind
self.version = None
+ self.deprecated_version = None
self.extension = None
self.supported_apis = {}
+ self.deprecated = {}
self.aliases = []
self.sources = []
for t in itertools.chain(commands, enums):
name = t.getAttribute("name")
- if profile!="core" and name in things:
- del things[name]
+ if name in things:
+ if profile!="core":
+ del things[name]
+ else:
+ things[name].deprecated.setdefault(api, version)
def parse_extension(ext):
ext_name = ext.getAttribute("name")
# Some final preparations for creating the files
core_version_candidates = {}
+min_deprecated_version = [999, 0]
backport_ext_candidates = []
for t in itertools.chain(funcs, enums):
if target_api in t.supported_apis and t.supported_apis[target_api]!="ext":
ver_tuple = tuple(t.version)
core_version_candidates[ver_tuple] = core_version_candidates.get(ver_tuple, 0)+1
+ if target_api in t.deprecated:
+ t.deprecated_version = t.deprecated[target_api]
+ min_deprecated_version = min(min_deprecated_version, t.deprecated_version)
+ else:
+ min_deprecated_version = None
+
# Things in backport extensions don't acquire an extension suffix
if t.extension and not t.name.endswith(ext_type) and target_api in t.supported_apis:
if t.extension not in backport_ext_candidates:
print "Warning: multiple likely core version candidates: %d.%d %d.%d"%(ver0[0], ver0[1], ver1[0], ver1[1])
core_version = core_version_candidates[0][1]
+if not deprecated_version:
+ deprecated_version = min_deprecated_version
+
if backport_ext:
if backport_ext=="none":
backport_ext = None
#define GET_PROC_ADDRESS(x) get_proc_address(#x)
#endif
-#ifdef WIN32
+#ifdef _WIN32
#define GET_PROC_ADDRESS_1_1(x) &::x
#else
#define GET_PROC_ADDRESS_1_1(x) GET_PROC_ADDRESS(x)
out.write("\nExtension::SupportLevel init_%s()\n{\n"%target_ext.name.lower())
if core_version:
- out.write("\tif(is_version_at_least(%d, %d)"%tuple(core_version))
+ out.write("\tif(is_disabled(\"GL_%s\"))\n\t\treturn Extension::UNSUPPORTED;\n"%target_ext.name)
+ out.write("#if !defined(__APPLE__) || defined(GL_VERSION_%d_%d)\n"%tuple(core_version))
+ out.write("\tif(")
if backport_ext:
- out.write(" || is_supported(\"GL_%s\")"%backport_ext.name)
- out.write(")\n\t{\n")
+ out.write("is_supported(\"GL_%s\") || "%backport_ext.name)
+ out.write("is_supported(Version(%d, %d)"%tuple(core_version))
+ if deprecated_version:
+ out.write(", Version(%d, %d)"%tuple(deprecated_version))
+ out.write("))\n\t{\n")
for f in funcs:
if target_api in f.supported_apis:
gpa_suffix = ""
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")
+ out.write("#endif\n")
if source_ext and source_ext!=backport_ext:
+ out.write("#if !defined(__APPLE__) || defined(GL_%s)\n"%target_ext.name)
out.write("\tif(is_supported(\"GL_%s\"))\n\t{\n"%(source_ext.name))
for f in funcs:
if f.sources:
out.write("\t\t%s = reinterpret_cast<%s>(GET_PROC_ADDRESS(%s));\n"%(f.name, f.typedef, src.name))
out.write("\t\treturn Extension::EXTENSION;\n")
out.write("\t}\n")
+ out.write("#endif\n")
out.write("\treturn Extension::UNSUPPORTED;\n")
out.write("}\n")