X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=scripts%2Fextgen.py;h=ff40ec60eadd1f515336f78d4d82eec2e0cfdfff;hp=1d9cad3e853050a764ddc8fee308f1d4e87cc6ce;hb=e19309340e90ee881e9cb2f8b7c33a5b89681aa6;hpb=e226ee890690e08cfa6f89a9a64e8a338db63822 diff --git a/scripts/extgen.py b/scripts/extgen.py index 1d9cad3e..ff40ec60 100755 --- a/scripts/extgen.py +++ b/scripts/extgen.py @@ -427,8 +427,32 @@ def detect_source_extension(host_api, things, debug=False): print "Looking for %d things in %d extensions"%(len(things), len(things_by_ext)) extensions = [] + keep_exts = 0 + base_version = None + recheck_base_version = True missing = set(things) - while missing and things_by_ext: + while 1: + if recheck_base_version: + max_version = Version(1, 0) + for t in missing: + supp = t.api_support.get(host_api.name) + if supp and supp.core_version and max_version: + max_version = max(max_version, supp.core_version) + else: + max_version = None + + if max_version: + if not base_version or max_version(GET_PROC_ADDRESS%s(%s));\n"%(f.name, self.func_typedefs[f.name], gpa_suffix, f.name)) + supp = f.api_support.get(self.host_api.name) + if supp: + gpa_suffix = "" + if supp.core_version is not None and supp.core_version<=Version(1, 1): + gpa_suffix = "_1_1" + out.write("\t\t%s = reinterpret_cast<%s>(GET_PROC_ADDRESS%s(%s));\n"%(f.name, self.func_typedefs[f.name], gpa_suffix, f.name)) out.write("\t\treturn Extension::CORE;\n") out.write("\t}\n") out.write("#endif\n") if self.source_exts: out.write("#if !defined(__APPLE__) || defined(GL_%s)\n"%self.ext_name) - out.write("\tif(%s)\n\t{\n"%" && ".join("is_supported(\"GL_%s\")"%s.name for s in self.source_exts)) + out.write("\tif(") + if self.base_version: + out.write("is_supported(%r) && "%self.base_version) + out.write("%s)\n\t{\n"%" && ".join("is_supported(\"GL_%s\")"%s.name for s in self.source_exts)) for f in self.funcs: - supp = f.api_support[self.host_api.name] - if supp.sources: - src = None - for e in self.source_exts: + supp = f.api_support.get(self.host_api.name) + src = None + for e in self.source_exts: + if f in e.things: + src = f + elif supp: for s in supp.sources: if s.name in e.things: src = s break - if src: - break - else: - src = f + if src: + break + if not src and supp and supp.core_version and self.base_version>=supp.core_version: + sec = f if src: out.write("\t\t%s = reinterpret_cast<%s>(GET_PROC_ADDRESS(%s));\n"%(f.name, self.func_typedefs[f.name], src.name)) @@ -671,13 +715,14 @@ class ExtensionParser: self.core_version = None self.deprecated_version = None self.backport_ext = None + self.source_exts = [] self.ignore_things = [] self.optional_things = [] def parse(self, fn): for line in open(fn): line = line.strip() - if line.startswith("#"): + if not line or line.startswith("#"): continue parts = line.split() @@ -697,6 +742,8 @@ class ExtensionParser: self.deprecated_version = Version(*map(int, parts[1].split('.'))) elif keyword=="backport": self.backport_ext = parts[1] + elif keyword=="source": + self.source_exts.append(parts[1]) elif keyword=="ignore": self.ignore_things.append(parts[1]) elif keyword=="optional": @@ -804,6 +851,12 @@ replaced with cpp and h.""" generator.backport_ext = None else: generator.backport_ext = get_extension(xml_parser.apis, ext_parser.backport_ext) + if ext_parser.source_exts: + generator.base_version = None + if len(ext_parser.source_exts)==1 and ext_parser.source_exts[0]=="none": + generator.source_exts = [] + else: + generator.source_exts = map((lambda e: get_extension(xml_parser.apis, e)), ext_parser.source_exts) if debug: generator.dump_info() generator.write_header(out_base+".h")