APIENTRY is unconditionally defined through windows.h while it already has been defined previously in oglpfuncs.h, resulting in a macro redefinition warning. In this case fix the warning by undefining the macro prior to including windows.h.
		
			
				
	
	
		
			145 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        oglpfuncs.cpp
 | |
| // Purpose:     Pointers to OpenGL functions
 | |
| // Author:      Manuel Martin
 | |
| // Created:     2015/11/16
 | |
| // Copyright:   (c) 2015 Manuel Martin
 | |
| // Licence:     wxWindows licence
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #include "oglpfuncs.h"
 | |
| 
 | |
| // Apple defines everything on his own
 | |
| #ifndef __APPLE__
 | |
| 
 | |
| #if defined(_WIN32) || defined(__WIN32__)
 | |
|     #ifndef WIN32_LEAN_AND_MEAN
 | |
|         // Reduce a bit header VC++ compilation time
 | |
|         #define WIN32_LEAN_AND_MEAN 1
 | |
|         #define LE_ME_ISDEF
 | |
|     #endif
 | |
| 
 | |
|     /*
 | |
|     APIENTRY is defined in oglpfuncs.h as well as by windows.h. Undefine
 | |
|     it to prevent a macro redefinition warning.
 | |
|     */
 | |
|     #undef APIENTRY
 | |
|     #include <windows.h> //For wglGetProcAddress
 | |
|     #ifdef LE_ME_ISDEF
 | |
|         #undef WIN32_LEAN_AND_MEAN
 | |
|         #undef LE_ME_ISDEF
 | |
|     #endif
 | |
|     // Our macro
 | |
|     #define MyGetProcAddress(name) wglGetProcAddress((LPCSTR)name)
 | |
| #else // Linux
 | |
|     // GLX_ARB_get_proc_address
 | |
|     // glXGetProcAddressARB is statically exported by all libGL implementations,
 | |
|     // while glXGetProcAddress may be not available.
 | |
|     #ifdef __cplusplus
 | |
|         extern "C" {
 | |
|     #endif
 | |
|     extern void (*glXGetProcAddressARB(const GLubyte *procName))();
 | |
|     #ifdef __cplusplus
 | |
|         }
 | |
|     #endif
 | |
|     #define MyGetProcAddress(name) (*glXGetProcAddressARB)((const GLubyte*)name)
 | |
| #endif
 | |
| 
 | |
| // The function to get the pointers
 | |
| void* MyGetGLFuncAddress(const char* fname)
 | |
| {
 | |
|     void* pret = (void*) MyGetProcAddress(fname);
 | |
| 
 | |
|     // Some drivers return -apart from 0-, -1, 1, 2 or 3
 | |
|     if ( pret == (void*)-1 || pret == (void*)1 || pret == (void*)2 || pret == (void*)3 )
 | |
|         pret = (void*)0;
 | |
| 
 | |
|     return pret;
 | |
| }
 | |
| 
 | |
| // Declare and initialize pointers
 | |
| PFNGLACTIVETEXTUREPROC my_glActiveTexture = NULL;
 | |
| PFNGLATTACHSHADERPROC my_glAttachShader = NULL;
 | |
| PFNGLBINDATTRIBLOCATIONPROC my_glBindAttribLocation = NULL;
 | |
| PFNGLBINDBUFFERPROC my_glBindBuffer = NULL;
 | |
| PFNGLBINDVERTEXARRAYPROC my_glBindVertexArray = NULL;
 | |
| PFNGLBUFFERDATAPROC my_glBufferData = NULL;
 | |
| PFNGLBUFFERSUBDATAPROC my_glBufferSubData = NULL;
 | |
| PFNGLCOMPILESHADERPROC my_glCompileShader = NULL;
 | |
| PFNGLCREATEPROGRAMPROC my_glCreateProgram = NULL;
 | |
| PFNGLCREATESHADERPROC my_glCreateShader = NULL;
 | |
| PFNGLDELETEBUFFERSPROC my_glDeleteBuffers = NULL;
 | |
| PFNGLDELETEPROGRAMPROC my_glDeleteProgram = NULL;
 | |
| PFNGLDELETESHADERPROC my_glDeleteShader = NULL;
 | |
| PFNGLDELETEVERTEXARRAYSPROC my_glDeleteVertexArrays = NULL;
 | |
| PFNGLDETACHSHADERPROC my_glDetachShader = NULL;
 | |
| PFNGLDISABLEVERTEXATTRIBARRAYPROC my_glDisableVertexAttribArray = NULL;
 | |
| PFNGLENABLEVERTEXATTRIBARRAYPROC my_glEnableVertexAttribArray = NULL;
 | |
| PFNGLGENBUFFERSPROC my_glGenBuffers = NULL;
 | |
| PFNGLGENVERTEXARRAYSPROC my_glGenVertexArrays = NULL;
 | |
| PFNGLGETPROGRAMINFOLOGPROC my_glGetProgramInfoLog = NULL;
 | |
| PFNGLGETPROGRAMIVPROC my_glGetProgramiv = NULL;
 | |
| PFNGLGETSHADERINFOLOGPROC my_glGetShaderInfoLog = NULL;
 | |
| PFNGLGETSHADERIVPROC my_glGetShaderiv = NULL;
 | |
| PFNGLGETUNIFORMLOCATIONPROC my_glGetUniformLocation = NULL;
 | |
| PFNGLLINKPROGRAMPROC my_glLinkProgram = NULL;
 | |
| PFNGLPROVOKINGVERTEXPROC my_glProvokingVertex = NULL;
 | |
| PFNGLSHADERSOURCEPROC my_glShaderSource = NULL;
 | |
| PFNGLUNIFORM1IPROC my_glUniform1i = NULL;
 | |
| PFNGLUNIFORM3FVPROC my_glUniform3fv = NULL;
 | |
| PFNGLUNIFORM4FVPROC my_glUniform4fv = NULL;
 | |
| PFNGLUNIFORMMATRIX4FVPROC my_glUniformMatrix4fv = NULL;
 | |
| PFNGLUSEPROGRAMPROC my_glUseProgram = NULL;
 | |
| PFNGLVERTEXATTRIBPOINTERPROC my_glVertexAttribPointer = NULL;
 | |
| 
 | |
| #endif // __APPLE__
 | |
| 
 | |
| // Retrieve the pointers
 | |
| #define GETANDTEST(type, name)                       \
 | |
|     my_ ## name = (type) MyGetGLFuncAddress(#name);  \
 | |
|     if (name == 0)                                   \
 | |
|         return false;
 | |
| 
 | |
| bool MyInitGLPointers()
 | |
| {
 | |
| #ifdef __APPLE__
 | |
|     return true;
 | |
| #else
 | |
|     GETANDTEST(PFNGLACTIVETEXTUREPROC, glActiveTexture)
 | |
|     GETANDTEST(PFNGLATTACHSHADERPROC, glAttachShader)
 | |
|     GETANDTEST(PFNGLBINDATTRIBLOCATIONPROC, glBindAttribLocation)
 | |
|     GETANDTEST(PFNGLBINDBUFFERPROC, glBindBuffer)
 | |
|     GETANDTEST(PFNGLBINDVERTEXARRAYPROC, glBindVertexArray)
 | |
|     GETANDTEST(PFNGLBUFFERDATAPROC, glBufferData)
 | |
|     GETANDTEST(PFNGLBUFFERSUBDATAPROC, glBufferSubData)
 | |
|     GETANDTEST(PFNGLCOMPILESHADERPROC, glCompileShader)
 | |
|     GETANDTEST(PFNGLCREATEPROGRAMPROC, glCreateProgram)
 | |
|     GETANDTEST(PFNGLCREATESHADERPROC, glCreateShader)
 | |
|     GETANDTEST(PFNGLDELETEBUFFERSPROC, glDeleteBuffers)
 | |
|     GETANDTEST(PFNGLDELETEPROGRAMPROC, glDeleteProgram)
 | |
|     GETANDTEST(PFNGLDELETESHADERPROC, glDeleteShader)
 | |
|     GETANDTEST(PFNGLDELETEVERTEXARRAYSPROC, glDeleteVertexArrays)
 | |
|     GETANDTEST(PFNGLDETACHSHADERPROC, glDetachShader)
 | |
|     GETANDTEST(PFNGLDISABLEVERTEXATTRIBARRAYPROC, glDisableVertexAttribArray)
 | |
|     GETANDTEST(PFNGLENABLEVERTEXATTRIBARRAYPROC, glEnableVertexAttribArray)
 | |
|     GETANDTEST(PFNGLGENBUFFERSPROC, glGenBuffers)
 | |
|     GETANDTEST(PFNGLGENVERTEXARRAYSPROC, glGenVertexArrays)
 | |
|     GETANDTEST(PFNGLGETPROGRAMINFOLOGPROC, glGetProgramInfoLog)
 | |
|     GETANDTEST(PFNGLGETPROGRAMIVPROC, glGetProgramiv)
 | |
|     GETANDTEST(PFNGLGETSHADERINFOLOGPROC, glGetShaderInfoLog)
 | |
|     GETANDTEST(PFNGLGETSHADERIVPROC, glGetShaderiv)
 | |
|     GETANDTEST(PFNGLGETUNIFORMLOCATIONPROC, glGetUniformLocation)
 | |
|     GETANDTEST(PFNGLLINKPROGRAMPROC, glLinkProgram)
 | |
|     GETANDTEST(PFNGLPROVOKINGVERTEXPROC, glProvokingVertex)
 | |
|     GETANDTEST(PFNGLSHADERSOURCEPROC, glShaderSource)
 | |
|     GETANDTEST(PFNGLUNIFORM1IPROC, glUniform1i)
 | |
|     GETANDTEST(PFNGLUNIFORM3FVPROC, glUniform3fv)
 | |
|     GETANDTEST(PFNGLUNIFORM4FVPROC, glUniform4fv)
 | |
|     GETANDTEST(PFNGLUNIFORMMATRIX4FVPROC, glUniformMatrix4fv)
 | |
|     GETANDTEST(PFNGLUSEPROGRAMPROC, glUseProgram)
 | |
|     GETANDTEST(PFNGLVERTEXATTRIBPOINTERPROC, glVertexAttribPointer)
 | |
| 
 | |
|     return true;
 | |
| #endif
 | |
| }
 |