]> git.mxchange.org Git - simgear.git/blob - simgear/screen/extensions.cxx
MSVC and Apple OS X fixes
[simgear.git] / simgear / screen / extensions.cxx
1 /*
2  *
3  * Copyright (c) 2001 César Blecua Udías    All Rights Reserved.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included
13  * in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18  * CESAR BLECUA UDIAS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
19  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
20  * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21  * SOFTWARE.
22  *
23  */
24
25 #include <string.h>
26
27 #ifndef WIN32
28 #include <dlfcn.h>
29 #else
30 #include <windows.h>
31 #endif
32
33 #include "extensions.hxx"
34
35 bool SGSearchExtensionsString(char *extString, char *extName) {
36     // Returns GL_TRUE if the *extName string appears in the *extString string,
37     // surrounded by white spaces, or GL_FALSE otherwise.
38
39     char *p, *end;
40     int n, extNameLen;
41
42     extNameLen = strlen(extName);
43
44     p=extString;
45     end = p + strlen(p);
46
47     while (p < end) {
48         n = strcspn(p, " ");
49         if ((extNameLen == n) && (strncmp(extName, p, n) == 0))
50             return GL_TRUE;
51
52         p += (n + 1);
53     }
54
55     return GL_FALSE;
56 }
57
58 bool SGIsOpenGLExtensionSupported(char *extName) {
59    // Returns GL_TRUE if the OpenGL Extension whose name is *extName
60    // is supported by the system, or GL_FALSE otherwise.
61    //
62    // The *extName string must follow the OpenGL extensions naming scheme
63    // (ie: "GL_type_extension", like GL_EXT_convolution)
64
65     return SGSearchExtensionsString((char *)glGetString(GL_EXTENSIONS),
66 extName);
67 }
68
69 #ifdef __APPLE__
70
71 #include <CoreFoundation/CoreFoundation.h>
72
73 void* macosxGetGLProcAddress(const char *func) {
74
75   /* We may want to cache the bundleRef at some point */
76   static CFBundleRef bundle = 0;
77
78   if (!bundle) {
79
80     CFURLRef bundleURL = CFURLCreateWithFileSystemPath (kCFAllocatorDefault,
81                                                         CFSTR("/System/Library/Frameworks/OpenGL.framework"), kCFURLPOSIXPathStyle, true);
82
83     bundle = CFBundleCreate (kCFAllocatorDefault, bundleURL);
84     CFRelease (bundleURL);
85   }
86
87   if (!bundle)
88     return 0;
89
90   CFStringRef functionName = CFStringCreateWithCString
91     (kCFAllocatorDefault, func, kCFStringEncodingASCII);
92   
93   void *function;
94   
95   function = CFBundleGetFunctionPointerForName (bundle, functionName);
96
97   CFRelease (functionName);
98
99   return function;
100 }
101
102 #endif