From: Mikko Rasa Date: Thu, 13 Nov 2014 18:55:10 +0000 (+0200) Subject: Fix extension functions on Windows X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=commitdiff_plain;h=bdced13c0814d1a860573a0ac19964da2ac4d5e1;hp=e5d7b40938e4ae38c41ae6ed054319f7f3fa600f Fix extension functions on Windows They have to be marked with APIENTRY for the correct calling convention. OpenGL 1.0 and 1.1 functions are not available through wglGetProcAddress, so link them directly. --- diff --git a/scripts/extgen.py b/scripts/extgen.py index c5bc219a..ec57e2ef 100755 --- a/scripts/extgen.py +++ b/scripts/extgen.py @@ -386,7 +386,7 @@ namespace GL { 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: @@ -430,10 +430,16 @@ out.write("#include \"%s.h\"\n"%target_ext.name.lower()) 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 { @@ -452,7 +458,10 @@ if core_version: out.write(")\n\t{\n") for f in funcs: if 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)) + 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: diff --git a/source/gl.h b/source/gl.h index ae145457..f7cba6b7 100644 --- a/source/gl.h +++ b/source/gl.h @@ -18,4 +18,8 @@ typedef double GLdouble; #include #endif +#ifndef APIENTRY +#define APIENTRY +#endif + #endif