From 710418caebcbcb9ed22bb828cb1dcd88d6b99aa1 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Thu, 3 Oct 2013 11:02:04 +0300 Subject: [PATCH] Final touches of OS X support --- .gitignore | 1 + scripts/extgen.py | 32 ++++++++++++++++++++++---------- source/extension.cpp | 11 +++++++---- source/gl.h | 5 +++++ 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 62e48cab..cff6fec5 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ temp /desertpillars /libmspgl.a /libmspgl.so +/libmspgl.dylib /mesh2c /mspgl.pc /shaders diff --git a/scripts/extgen.py b/scripts/extgen.py index 4333cf37..eef6475a 100755 --- a/scripts/extgen.py +++ b/scripts/extgen.py @@ -247,8 +247,13 @@ if funcs or enums: for e in enums: out.write("#define %s 0x%04X\n"%(e.name, e.value)) out.write("#endif\n\n") + + # Apple's OpenGL implementation doesn't have a GetProcAddress function; link + # directly to the OpenGL library + out.write("\n#if !defined(__APPLE__) || !defined(GL_%s)\n"%ext) for f in funcs: out.write("extern %s %s;\n"%(f.typedef, f.name)) + out.write("#endif\n") out.write("\nextern Extension %s;\n"%ext) @@ -268,9 +273,10 @@ namespace GL { """) if funcs: - out.write("\n") -for f in funcs: - out.write("%s %s = 0;\n"%(f.typedef, f.name)) + out.write("\n#if !defined(__APPLE__) || !defined(GL_%s)\n"%ext) + for f in funcs: + out.write("%s %s = 0;\n"%(f.typedef, f.name)) + out.write("\n#endif\n") out.write("\nExtension::SupportLevel init_%s()\n{\n"%ext.lower()) out.write("#ifdef GL_%s\n"%ext) @@ -279,17 +285,23 @@ if ver: if backport_ext: out.write(" || is_supported(\"GL_%s\")"%backport_ext) out.write(")\n\t{\n") - for f in funcs: - out.write("\t\t%s = reinterpret_cast<%s>(get_proc_address(\"%s\"));\n"%(f.name, f.typedef, f.name)) + if funcs: + out.write("#ifndef __APPLE__\n") + for f in funcs: + out.write("\t\t%s = reinterpret_cast<%s>(get_proc_address(\"%s\"));\n"%(f.name, f.typedef, f.name)) + out.write("#endif\n") out.write("\t\treturn Extension::CORE;\n") out.write("\t}\n") if ext!=backport_ext: out.write("\tif(is_supported(\"GL_%s\"))\n\t{\n"%(ext)) - for f in funcs: - n = f.name - if f.source: - n = f.source.name - out.write("\t\t%s = reinterpret_cast<%s>(get_proc_address(\"%s\"));\n"%(f.name, f.typedef, n)) + if funcs: + out.write("#ifndef __APPLE__\n") + for f in funcs: + n = f.name + if f.source: + n = f.source.name + out.write("\t\t%s = reinterpret_cast<%s>(get_proc_address(\"%s\"));\n"%(f.name, f.typedef, n)) + out.write("#endif\n") out.write("\t\treturn Extension::EXTENSION;\n") out.write("\t}\n") out.write("#endif\n") diff --git a/source/extension.cpp b/source/extension.cpp index d4acedaf..56f96d4e 100644 --- a/source/extension.cpp +++ b/source/extension.cpp @@ -1,5 +1,5 @@ #include -#ifndef WIN32 +#if !defined(WIN32) && !defined(__APPLE__) #define GLX_GLXEXT_PROTOTYPES #include #endif @@ -92,10 +92,13 @@ bool is_version_at_least(unsigned a, unsigned b) ExtFunc *get_proc_address(const string &name) { -#ifndef WIN32 - return glXGetProcAddressARB(reinterpret_cast(name.c_str())); -#else +#if defined(WIN32) return reinterpret_cast(wglGetProcAddress(name.c_str())); +#elif defined(__APPLE__) + (void)name; + return 0; // Not supported +#else + return glXGetProcAddressARB(reinterpret_cast(name.c_str())); #endif } diff --git a/source/gl.h b/source/gl.h index 2c77d680..05844ba5 100644 --- a/source/gl.h +++ b/source/gl.h @@ -4,7 +4,12 @@ #ifdef WIN32 #include #endif +#ifdef __APPLE__ +#include +#include +#else #include #include +#endif #endif -- 2.45.2