#include <GL/glew.h> | |
#if defined(_WIN32) | |
# include <GL/wglew.h> | |
#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) | |
# include <GL/glxew.h> | |
#endif | |
/* | |
* Define glewGetContext and related helper macros. | |
*/ | |
#ifdef GLEW_MX | |
# define glewGetContext() ctx | |
# ifdef _WIN32 | |
# define GLEW_CONTEXT_ARG_DEF_INIT GLEWContext* ctx | |
# define GLEW_CONTEXT_ARG_VAR_INIT ctx | |
# define wglewGetContext() ctx | |
# define WGLEW_CONTEXT_ARG_DEF_INIT WGLEWContext* ctx | |
# define WGLEW_CONTEXT_ARG_DEF_LIST WGLEWContext* ctx | |
# else /* _WIN32 */ | |
# define GLEW_CONTEXT_ARG_DEF_INIT void | |
# define GLEW_CONTEXT_ARG_VAR_INIT | |
# define glxewGetContext() ctx | |
# define GLXEW_CONTEXT_ARG_DEF_INIT void | |
# define GLXEW_CONTEXT_ARG_DEF_LIST GLXEWContext* ctx | |
# endif /* _WIN32 */ | |
# define GLEW_CONTEXT_ARG_DEF_LIST GLEWContext* ctx | |
#else /* GLEW_MX */ | |
# define GLEW_CONTEXT_ARG_DEF_INIT void | |
# define GLEW_CONTEXT_ARG_VAR_INIT | |
# define GLEW_CONTEXT_ARG_DEF_LIST void | |
# define WGLEW_CONTEXT_ARG_DEF_INIT void | |
# define WGLEW_CONTEXT_ARG_DEF_LIST void | |
# define GLXEW_CONTEXT_ARG_DEF_INIT void | |
# define GLXEW_CONTEXT_ARG_DEF_LIST void | |
#endif /* GLEW_MX */ | |
#if defined(__APPLE__) | |
#include <mach-o/dyld.h> | |
#include <stdlib.h> | |
#include <string.h> | |
void* NSGLGetProcAddress (const GLubyte *name) | |
{ | |
static const struct mach_header* image = NULL; | |
NSSymbol symbol; | |
char* symbolName; | |
if (NULL == image) | |
{ | |
image = NSAddImage("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", NSADDIMAGE_OPTION_RETURN_ON_ERROR); | |
} | |
/* prepend a '_' for the Unix C symbol mangling convention */ | |
symbolName = malloc(strlen((const char*)name) + 2); | |
strcpy(symbolName+1, (const char*)name); | |
symbolName[0] = '_'; | |
symbol = NULL; | |
/* if (NSIsSymbolNameDefined(symbolName)) | |
symbol = NSLookupAndBindSymbol(symbolName); */ | |
symbol = image ? NSLookupSymbolInImage(image, symbolName, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR) : NULL; | |
free(symbolName); | |
return symbol ? NSAddressOfSymbol(symbol) : NULL; | |
} | |
#endif /* __APPLE__ */ | |
#if defined(__sgi) || defined (__sun) | |
#include <dlfcn.h> | |
#include <stdio.h> | |
#include <stdlib.h> | |
void* dlGetProcAddress (const GLubyte* name) | |
{ | |
static void* h = NULL; | |
static void* gpa; | |
if (h == NULL) | |
{ | |
if ((h = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL)) == NULL) return NULL; | |
gpa = dlsym(h, "glXGetProcAddress"); | |
} | |
if (gpa != NULL) | |
return ((void*(*)(const GLubyte*))gpa)(name); | |
else | |
return dlsym(h, (const char*)name); | |
} | |
#endif /* __sgi || __sun */ | |
/* | |
* Define glewGetProcAddress. | |
*/ | |
#if defined(_WIN32) | |
# define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name) | |
#else | |
# if defined(__APPLE__) | |
# define glewGetProcAddress(name) NSGLGetProcAddress(name) | |
# else | |
# if defined(__sgi) || defined(__sun) | |
# define glewGetProcAddress(name) dlGetProcAddress(name) | |
# else /* __linux */ | |
# define glewGetProcAddress(name) (*glXGetProcAddressARB)(name) | |
# endif | |
# endif | |
#endif | |
/* | |
* Define GLboolean const cast. | |
*/ | |
#define CONST_CAST(x) (*(GLboolean*)&x) | |
/* | |
* GLEW, just like OpenGL or GLU, does not rely on the standard C library. | |
* These functions implement the functionality required in this file. | |
*/ | |
static GLuint _glewStrLen (const GLubyte* s) | |
{ | |
GLuint i=0; | |
if (s == NULL) return 0; | |
while (s[i] != '\0') i++; | |
return i; | |
} | |
static GLuint _glewStrCLen (const GLubyte* s, GLubyte c) | |
{ | |
GLuint i=0; | |
if (s == NULL) return 0; | |
while (s[i] != '\0' && s[i] != c) i++; | |
return s[i] == c ? i : 0; | |
} | |
static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) | |
{ | |
GLuint i=0; | |
if(a == NULL || b == NULL) | |
return (a == NULL && b == NULL && n == 0) ? GL_TRUE : GL_FALSE; | |
while (i < n && a[i] != '\0' && b[i] != '\0' && a[i] == b[i]) i++; | |
return i == n ? GL_TRUE : GL_FALSE; | |
} | |
static GLboolean _glewStrSame1 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) | |
{ | |
while (*na > 0 && (**a == ' ' || **a == '\n' || **a == '\r' || **a == '\t')) | |
{ | |
(*a)++; | |
(*na)--; | |
} | |
if(*na >= nb) | |
{ | |
GLuint i=0; | |
while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; | |
if(i == nb) | |
{ | |
*a = *a + nb; | |
*na = *na - nb; | |
return GL_TRUE; | |
} | |
} | |
return GL_FALSE; | |
} | |
static GLboolean _glewStrSame2 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) | |
{ | |
if(*na >= nb) | |
{ | |
GLuint i=0; | |
while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; | |
if(i == nb) | |
{ | |
*a = *a + nb; | |
*na = *na - nb; | |
return GL_TRUE; | |
} | |
} | |
return GL_FALSE; | |
} | |
static GLboolean _glewStrSame3 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) | |
{ | |
if(*na >= nb) | |
{ | |
GLuint i=0; | |
while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; | |
if (i == nb && (*na == nb || (*a)[i] == ' ' || (*a)[i] == '\n' || (*a)[i] == '\r' || (*a)[i] == '\t')) | |
{ | |
*a = *a + nb; | |
*na = *na - nb; | |
return GL_TRUE; | |
} | |
} | |
return GL_FALSE; | |
} |