Skip to content

Commit

Permalink
Fix compiler warnings caused by <funcptr> = <genericfuncptr>
Browse files Browse the repository at this point in the history
  • Loading branch information
keesverruijt committed Oct 13, 2015
1 parent 8fbc435 commit 14e580c
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 80 deletions.
88 changes: 28 additions & 60 deletions src/shaderutil.c
Expand Up @@ -10,37 +10,33 @@
extern "C" {
#endif


#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "shaderutil.h"

PFNGLCREATESHADERPROC CreateShader = NULL;
PFNGLDELETESHADERPROC DeleteShader = NULL;
PFNGLSHADERSOURCEPROC ShaderSource = NULL;
PFNGLGETSHADERIVPROC GetShaderiv = NULL;
PFNGLGETSHADERINFOLOGPROC GetShaderInfoLog = NULL;
PFNGLCREATEPROGRAMPROC CreateProgram = NULL;
PFNGLDELETEPROGRAMPROC DeleteProgram = NULL;
PFNGLATTACHSHADERPROC AttachShader = NULL;
PFNGLLINKPROGRAMPROC LinkProgram = NULL;
PFNGLUSEPROGRAMPROC UseProgram = NULL;
PFNGLGETPROGRAMIVPROC GetProgramiv = NULL;
PFNGLGETPROGRAMINFOLOGPROC GetProgramInfoLog = NULL;
PFNGLVALIDATEPROGRAMPROC ValidateProgram = NULL;
PFNGLUNIFORM1IPROC Uniform1i = NULL;
PFNGLUNIFORM1FVPROC Uniform1fv = NULL;
PFNGLUNIFORM2FVPROC Uniform2fv = NULL;
PFNGLUNIFORM3FVPROC Uniform3fv = NULL;
PFNGLUNIFORM4FVPROC Uniform4fv = NULL;
PFNGLUNIFORMMATRIX4FVPROC UniformMatrix4fv = NULL;
PFNGLGETACTIVEATTRIBPROC GetActiveAttrib = NULL;
PFNGLGETATTRIBLOCATIONPROC GetAttribLocation = NULL;
PFNGLGETUNIFORMLOCATIONPROC GetUniformLocation = NULL;
PFNGLGETACTIVEUNIFORMPROC GetActiveUniform = NULL;
PFNGLCOMPILESHADERPROC CompileShader = NULL;
#if defined(WIN32)
# define SET_FUNCTION_POINTER(name) wglGetProcAddress(name)
typedef PROC FunctionPointer;
#elif defined(__WXOSX__)
# include <dlfcn.h>
# define SET_FUNCTION_POINTER(name) dlsym(RTLD_DEFAULT, name)
typedef void * (*FunctionPointer)(void);
#else
# include <GL/glx.h>
# define SET_FUNCTION_POINTER(name) glXGetProcAddress((const GLubyte *) name)
typedef __GLXextFuncPtr FunctionPointer;
#endif


#define SHADER_FUNCTION_LIST(proc, name) \
proc name;
#include "shaderutil.h"
#undef SHADER_FUNCTION_LIST


#if 0
static void GLAPIENTRY
Expand All @@ -50,45 +46,17 @@ fake_ValidateProgram(GLuint prog)
}
#endif

#if defined(WIN32)
# define systemGetProcAddress(ADDR) wglGetProcAddress(ADDR)
#elif defined(__WXOSX__)
# include <dlfcn.h>
# define systemGetProcAddress(ADDR) dlsym( RTLD_DEFAULT, ADDR)
#else
# include <GL/glx.h>
# define systemGetProcAddress(ADDR) glXGetProcAddress((const GLubyte*)ADDR)
#endif

GLboolean
ShadersSupported(void)
{
CreateShader = systemGetProcAddress("glCreateShader");
DeleteShader = systemGetProcAddress("glDeleteShader");
ShaderSource = systemGetProcAddress("glShaderSource");
GetShaderiv = systemGetProcAddress("glGetShaderiv");
GetShaderInfoLog = systemGetProcAddress("glGetShaderInfoLog");
CreateProgram = systemGetProcAddress("glCreateProgram");
DeleteProgram = systemGetProcAddress("glDeleteProgram");
AttachShader = systemGetProcAddress("glAttachShader");
LinkProgram = systemGetProcAddress("glLinkProgram");
UseProgram = systemGetProcAddress("glUseProgram");
GetProgramiv = systemGetProcAddress("glGetProgramiv");
GetProgramInfoLog = systemGetProcAddress("glGetProgramInfoLog");
ValidateProgram = systemGetProcAddress("glValidateProgram");
Uniform1i = systemGetProcAddress("glUniform1i");
Uniform1fv = systemGetProcAddress("glUniform1fv");
Uniform2fv = systemGetProcAddress("glUniform2fv");
Uniform3fv = systemGetProcAddress("glUniform3fv");
Uniform4fv = systemGetProcAddress("glUniform4fv");
UniformMatrix4fv = systemGetProcAddress("glUniformMatrix4fv");
GetActiveAttrib = systemGetProcAddress("glGetActiveAttrib");
GetAttribLocation = systemGetProcAddress("glGetAttribLocation");
GetUniformLocation = systemGetProcAddress("glGetUniformLocation");
GetActiveUniform = systemGetProcAddress("glGetActiveUniform");
CompileShader = systemGetProcAddress("glCompileShader");

return UseProgram != 0;
GLboolean ok = 1;

#define SHADER_FUNCTION_LIST(proc, name) \
{ union { proc f; FunctionPointer p; } u; u.p = SET_FUNCTION_POINTER("gl" #name); if (!u.p) ok = 0; name = u.f; }
#include "shaderutil.h"
#undef SHADER_FUNCTION_LIST

return ok;
}

GLuint
Expand Down
51 changes: 31 additions & 20 deletions src/shaderutil.h
Expand Up @@ -89,29 +89,40 @@ PrintAttribs(const struct attrib_info attribs[]);

/* These pointers are only valid after calling ShadersSupported.
*/
extern PFNGLCREATESHADERPROC CreateShader;
extern PFNGLDELETESHADERPROC DeleteShader;
extern PFNGLSHADERSOURCEPROC ShaderSource;
extern PFNGLGETSHADERIVPROC GetShaderiv;
extern PFNGLGETSHADERINFOLOGPROC GetShaderInfoLog;
extern PFNGLCREATEPROGRAMPROC CreateProgram;
extern PFNGLDELETEPROGRAMPROC DeleteProgram;
extern PFNGLATTACHSHADERPROC AttachShader;
extern PFNGLLINKPROGRAMPROC LinkProgram;
extern PFNGLUSEPROGRAMPROC UseProgram;
extern PFNGLGETPROGRAMIVPROC GetProgramiv;
extern PFNGLGETPROGRAMINFOLOGPROC GetProgramInfoLog;
extern PFNGLVALIDATEPROGRAMPROC ValidateProgram;
extern PFNGLUNIFORM1IPROC Uniform1i;
extern PFNGLUNIFORM1FVPROC Uniform1fv;
extern PFNGLUNIFORM2FVPROC Uniform2fv;
extern PFNGLUNIFORM3FVPROC Uniform3fv;
extern PFNGLUNIFORM4FVPROC Uniform4fv;
extern PFNGLGETACTIVEATTRIBPROC GetActiveAttrib;
extern PFNGLGETATTRIBLOCATIONPROC GetAttribLocation;
#define SHADER_FUNCTION_LIST(proc, name) \
extern proc name;
#include "shaderutil.h"
#undef SHADER_FUNCTION_LIST

#ifdef __cplusplus
}
#endif

#endif /* SHADER_UTIL_H */

#ifdef SHADER_FUNCTION_LIST
SHADER_FUNCTION_LIST(PFNGLCREATESHADERPROC, CreateShader)
SHADER_FUNCTION_LIST(PFNGLDELETESHADERPROC, DeleteShader)
SHADER_FUNCTION_LIST(PFNGLSHADERSOURCEPROC, ShaderSource)
SHADER_FUNCTION_LIST(PFNGLGETSHADERIVPROC, GetShaderiv)
SHADER_FUNCTION_LIST(PFNGLGETSHADERINFOLOGPROC, GetShaderInfoLog)
SHADER_FUNCTION_LIST(PFNGLCREATEPROGRAMPROC, CreateProgram)
SHADER_FUNCTION_LIST(PFNGLDELETEPROGRAMPROC, DeleteProgram)
SHADER_FUNCTION_LIST(PFNGLATTACHSHADERPROC, AttachShader)
SHADER_FUNCTION_LIST(PFNGLLINKPROGRAMPROC, LinkProgram)
SHADER_FUNCTION_LIST(PFNGLUSEPROGRAMPROC, UseProgram)
SHADER_FUNCTION_LIST(PFNGLGETPROGRAMIVPROC, GetProgramiv)
SHADER_FUNCTION_LIST(PFNGLGETPROGRAMINFOLOGPROC, GetProgramInfoLog)
SHADER_FUNCTION_LIST(PFNGLVALIDATEPROGRAMPROC, ValidateProgram)
SHADER_FUNCTION_LIST(PFNGLUNIFORM1IPROC, Uniform1i)
SHADER_FUNCTION_LIST(PFNGLUNIFORM1FVPROC, Uniform1fv)
SHADER_FUNCTION_LIST(PFNGLUNIFORM2FVPROC, Uniform2fv)
SHADER_FUNCTION_LIST(PFNGLUNIFORM3FVPROC, Uniform3fv)
SHADER_FUNCTION_LIST(PFNGLUNIFORM4FVPROC, Uniform4fv)
SHADER_FUNCTION_LIST(PFNGLUNIFORMMATRIX4FVPROC, UniformMatrix4fv)
SHADER_FUNCTION_LIST(PFNGLGETACTIVEATTRIBPROC, GetActiveAttrib)
SHADER_FUNCTION_LIST(PFNGLGETATTRIBLOCATIONPROC, GetAttribLocation)
SHADER_FUNCTION_LIST(PFNGLGETUNIFORMLOCATIONPROC, GetUniformLocation)
SHADER_FUNCTION_LIST(PFNGLGETACTIVEUNIFORMPROC, GetActiveUniform)
SHADER_FUNCTION_LIST(PFNGLCOMPILESHADERPROC, CompileShader)
#endif

0 comments on commit 14e580c

Please sign in to comment.