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 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