From bdced13c0814d1a860573a0ac19964da2ac4d5e1 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Thu, 13 Nov 2014 20:55:10 +0200 Subject: [PATCH] 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. --- scripts/extgen.py | 15 ++++++++++++--- source/gl.h | 4 ++++ 2 files changed, 16 insertions(+), 3 deletions(-) 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 -- 2.45.2