| /** |
| * Utility for getting OpenGL extension function pointers |
| * Meant to be #included. |
| */ |
| |
| /* OpenGL 2.0 */ |
| static PFNGLATTACHSHADERPROC glAttachShader_func = NULL; |
| static PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation_func = NULL; |
| static PFNGLCOMPILESHADERPROC glCompileShader_func = NULL; |
| static PFNGLCREATEPROGRAMPROC glCreateProgram_func = NULL; |
| static PFNGLCREATESHADERPROC glCreateShader_func = NULL; |
| static PFNGLDELETEPROGRAMPROC glDeleteProgram_func = NULL; |
| static PFNGLDELETESHADERPROC glDeleteShader_func = NULL; |
| static PFNGLGETACTIVEATTRIBPROC glGetActiveAttrib_func = NULL; |
| static PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform_func = NULL; |
| static PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders_func = NULL; |
| static PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation_func = NULL; |
| static PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog_func = NULL; |
| static PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog_func = NULL; |
| static PFNGLGETSHADERIVPROC glGetShaderiv_func = NULL; |
| static PFNGLGETPROGRAMIVPROC glGetProgramiv_func = NULL; |
| static PFNGLGETSHADERSOURCEPROC glGetShaderSource_func = NULL; |
| static PFNGLGETUNIFORMFVPROC glGetUniformfv_func = NULL; |
| static PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation_func = NULL; |
| static PFNGLISPROGRAMPROC glIsProgram_func = NULL; |
| static PFNGLISSHADERPROC glIsShader_func = NULL; |
| static PFNGLLINKPROGRAMPROC glLinkProgram_func = NULL; |
| static PFNGLSHADERSOURCEPROC glShaderSource_func = NULL; |
| static PFNGLUNIFORM1IPROC glUniform1i_func = NULL; |
| static PFNGLUNIFORM2IPROC glUniform2i_func = NULL; |
| static PFNGLUNIFORM3IPROC glUniform3i_func = NULL; |
| static PFNGLUNIFORM4IPROC glUniform4i_func = NULL; |
| static PFNGLUNIFORM1FPROC glUniform1f_func = NULL; |
| static PFNGLUNIFORM2FPROC glUniform2f_func = NULL; |
| static PFNGLUNIFORM3FPROC glUniform3f_func = NULL; |
| static PFNGLUNIFORM4FPROC glUniform4f_func = NULL; |
| static PFNGLUNIFORM1FVPROC glUniform1fv_func = NULL; |
| static PFNGLUNIFORM2FVPROC glUniform2fv_func = NULL; |
| static PFNGLUNIFORM3FVPROC glUniform3fv_func = NULL; |
| static PFNGLUNIFORM4FVPROC glUniform4fv_func = NULL; |
| static PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv_func = NULL; |
| static PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv_func = NULL; |
| static PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv_func = NULL; |
| static PFNGLUSEPROGRAMPROC glUseProgram_func = NULL; |
| static PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f_func = NULL; |
| static PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f_func = NULL; |
| static PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f_func = NULL; |
| static PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f_func = NULL; |
| |
| /* OpenGL 2.1 */ |
| static PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv_func = NULL; |
| static PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv_func = NULL; |
| static PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv_func = NULL; |
| static PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv_func = NULL; |
| static PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv_func = NULL; |
| static PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv_func = NULL; |
| |
| /* OpenGL 1.4 */ |
| static PFNGLPOINTPARAMETERFVPROC glPointParameterfv_func = NULL; |
| static PFNGLSECONDARYCOLOR3FVPROC glSecondaryColor3fv_func = NULL; |
| |
| /* GL_ARB_vertex/fragment_program */ |
| static PFNGLBINDPROGRAMARBPROC glBindProgramARB_func = NULL; |
| static PFNGLDELETEPROGRAMSARBPROC glDeleteProgramsARB_func = NULL; |
| static PFNGLGENPROGRAMSARBPROC glGenProgramsARB_func = NULL; |
| static PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glGetProgramLocalParameterdvARB_func = NULL; |
| static PFNGLISPROGRAMARBPROC glIsProgramARB_func = NULL; |
| static PFNGLPROGRAMLOCALPARAMETER4DARBPROC glProgramLocalParameter4dARB_func = NULL; |
| static PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glProgramLocalParameter4fvARB_func = NULL; |
| static PFNGLPROGRAMSTRINGARBPROC glProgramStringARB_func = NULL; |
| static PFNGLVERTEXATTRIB1FARBPROC glVertexAttrib1fARB_func = NULL; |
| |
| /* GL_APPLE_vertex_array_object */ |
| static PFNGLBINDVERTEXARRAYAPPLEPROC glBindVertexArrayAPPLE_func = NULL; |
| static PFNGLDELETEVERTEXARRAYSAPPLEPROC glDeleteVertexArraysAPPLE_func = NULL; |
| static PFNGLGENVERTEXARRAYSAPPLEPROC glGenVertexArraysAPPLE_func = NULL; |
| static PFNGLISVERTEXARRAYAPPLEPROC glIsVertexArrayAPPLE_func = NULL; |
| |
| /* GL_EXT_stencil_two_side */ |
| static PFNGLACTIVESTENCILFACEEXTPROC glActiveStencilFaceEXT_func = NULL; |
| |
| |
| static void |
| GetExtensionFuncs(void) |
| { |
| /* OpenGL 2.0 */ |
| glAttachShader_func = (PFNGLATTACHSHADERPROC) glutGetProcAddress("glAttachShader"); |
| glBindAttribLocation_func = (PFNGLBINDATTRIBLOCATIONPROC) glutGetProcAddress("glBindAttribLocation"); |
| glCompileShader_func = (PFNGLCOMPILESHADERPROC) glutGetProcAddress("glCompileShader"); |
| glCreateProgram_func = (PFNGLCREATEPROGRAMPROC) glutGetProcAddress("glCreateProgram"); |
| glCreateShader_func = (PFNGLCREATESHADERPROC) glutGetProcAddress("glCreateShader"); |
| glDeleteProgram_func = (PFNGLDELETEPROGRAMPROC) glutGetProcAddress("glDeleteProgram"); |
| glDeleteShader_func = (PFNGLDELETESHADERPROC) glutGetProcAddress("glDeleteShader"); |
| glGetActiveAttrib_func = (PFNGLGETACTIVEATTRIBPROC) glutGetProcAddress("glGetActiveAttrib"); |
| glGetActiveUniform_func = (PFNGLGETACTIVEUNIFORMPROC) glutGetProcAddress("glGetActiveUniform"); |
| glGetAttachedShaders_func = (PFNGLGETATTACHEDSHADERSPROC) glutGetProcAddress("glGetAttachedShaders"); |
| glGetAttribLocation_func = (PFNGLGETATTRIBLOCATIONPROC) glutGetProcAddress("glGetAttribLocation"); |
| glGetProgramInfoLog_func = (PFNGLGETPROGRAMINFOLOGPROC) glutGetProcAddress("glGetProgramInfoLog"); |
| glGetShaderInfoLog_func = (PFNGLGETSHADERINFOLOGPROC) glutGetProcAddress("glGetShaderInfoLog"); |
| glGetProgramiv_func = (PFNGLGETPROGRAMIVPROC) glutGetProcAddress("glGetProgramiv"); |
| glGetShaderiv_func = (PFNGLGETSHADERIVPROC) glutGetProcAddress("glGetShaderiv"); |
| glGetShaderSource_func = (PFNGLGETSHADERSOURCEPROC) glutGetProcAddress("glGetShaderSource"); |
| glGetUniformLocation_func = (PFNGLGETUNIFORMLOCATIONPROC) glutGetProcAddress("glGetUniformLocation"); |
| glGetUniformfv_func = (PFNGLGETUNIFORMFVPROC) glutGetProcAddress("glGetUniformfv"); |
| glIsProgram_func = (PFNGLISPROGRAMPROC) glutGetProcAddress("glIsProgram"); |
| glIsShader_func = (PFNGLISSHADERPROC) glutGetProcAddress("glIsShader"); |
| glLinkProgram_func = (PFNGLLINKPROGRAMPROC) glutGetProcAddress("glLinkProgram"); |
| glShaderSource_func = (PFNGLSHADERSOURCEPROC) glutGetProcAddress("glShaderSource"); |
| glUniform1i_func = (PFNGLUNIFORM1IPROC) glutGetProcAddress("glUniform1i"); |
| glUniform2i_func = (PFNGLUNIFORM2IPROC) glutGetProcAddress("glUniform2i"); |
| glUniform3i_func = (PFNGLUNIFORM3IPROC) glutGetProcAddress("glUniform3i"); |
| glUniform4i_func = (PFNGLUNIFORM4IPROC) glutGetProcAddress("glUniform3i"); |
| glUniform1f_func = (PFNGLUNIFORM1FPROC) glutGetProcAddress("glUniform1f"); |
| glUniform2f_func = (PFNGLUNIFORM2FPROC) glutGetProcAddress("glUniform2f"); |
| glUniform3f_func = (PFNGLUNIFORM3FPROC) glutGetProcAddress("glUniform3f"); |
| glUniform4f_func = (PFNGLUNIFORM4FPROC) glutGetProcAddress("glUniform4f"); |
| glUniform1fv_func = (PFNGLUNIFORM1FVPROC) glutGetProcAddress("glUniform1fv"); |
| glUniform2fv_func = (PFNGLUNIFORM2FVPROC) glutGetProcAddress("glUniform2fv"); |
| glUniform3fv_func = (PFNGLUNIFORM3FVPROC) glutGetProcAddress("glUniform3fv"); |
| glUniform4fv_func = (PFNGLUNIFORM3FVPROC) glutGetProcAddress("glUniform4fv"); |
| glUniformMatrix2fv_func = (PFNGLUNIFORMMATRIX2FVPROC) glutGetProcAddress("glUniformMatrix2fv"); |
| glUniformMatrix3fv_func = (PFNGLUNIFORMMATRIX3FVPROC) glutGetProcAddress("glUniformMatrix3fv"); |
| glUniformMatrix4fv_func = (PFNGLUNIFORMMATRIX4FVPROC) glutGetProcAddress("glUniformMatrix4fv"); |
| glUseProgram_func = (PFNGLUSEPROGRAMPROC) glutGetProcAddress("glUseProgram"); |
| glVertexAttrib1f_func = (PFNGLVERTEXATTRIB1FPROC) glutGetProcAddress("glVertexAttrib1f"); |
| glVertexAttrib2f_func = (PFNGLVERTEXATTRIB2FPROC) glutGetProcAddress("glVertexAttrib2f"); |
| glVertexAttrib3f_func = (PFNGLVERTEXATTRIB3FPROC) glutGetProcAddress("glVertexAttrib3f"); |
| glVertexAttrib4f_func = (PFNGLVERTEXATTRIB4FPROC) glutGetProcAddress("glVertexAttrib4f"); |
| |
| /* OpenGL 2.1 */ |
| glUniformMatrix2x3fv_func = (PFNGLUNIFORMMATRIX2X3FVPROC) glutGetProcAddress("glUniformMatrix2x3fv"); |
| glUniformMatrix3x2fv_func = (PFNGLUNIFORMMATRIX3X2FVPROC) glutGetProcAddress("glUniformMatrix3x2fv"); |
| glUniformMatrix2x4fv_func = (PFNGLUNIFORMMATRIX2X4FVPROC) glutGetProcAddress("glUniformMatrix2x4fv"); |
| glUniformMatrix4x2fv_func = (PFNGLUNIFORMMATRIX4X2FVPROC) glutGetProcAddress("glUniformMatrix4x2fv"); |
| glUniformMatrix3x4fv_func = (PFNGLUNIFORMMATRIX3X4FVPROC) glutGetProcAddress("glUniformMatrix3x4fv"); |
| glUniformMatrix4x3fv_func = (PFNGLUNIFORMMATRIX4X3FVPROC) glutGetProcAddress("glUniformMatrix4x3fv"); |
| |
| /* OpenGL 1.4 */ |
| glPointParameterfv_func = (PFNGLPOINTPARAMETERFVPROC) glutGetProcAddress("glPointParameterfv"); |
| glSecondaryColor3fv_func = (PFNGLSECONDARYCOLOR3FVPROC) glutGetProcAddress("glSecondaryColor3fv"); |
| |
| /* GL_ARB_vertex/fragment_program */ |
| glBindProgramARB_func = (PFNGLBINDPROGRAMARBPROC) glutGetProcAddress("glBindProgramARB"); |
| glDeleteProgramsARB_func = (PFNGLDELETEPROGRAMSARBPROC) glutGetProcAddress("glDeleteProgramsARB"); |
| glGenProgramsARB_func = (PFNGLGENPROGRAMSARBPROC) glutGetProcAddress("glGenProgramsARB"); |
| glGetProgramLocalParameterdvARB_func = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) glutGetProcAddress("glGetProgramLocalParameterdvARB"); |
| glIsProgramARB_func = (PFNGLISPROGRAMARBPROC) glutGetProcAddress("glIsProgramARB"); |
| glProgramLocalParameter4dARB_func = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC) glutGetProcAddress("glProgramLocalParameter4dARB"); |
| glProgramLocalParameter4fvARB_func = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) glutGetProcAddress("glProgramLocalParameter4fvARB"); |
| glProgramStringARB_func = (PFNGLPROGRAMSTRINGARBPROC) glutGetProcAddress("glProgramStringARB"); |
| glVertexAttrib1fARB_func = (PFNGLVERTEXATTRIB1FARBPROC) glutGetProcAddress("glVertexAttrib1fARB"); |
| |
| /* GL_APPLE_vertex_array_object */ |
| glBindVertexArrayAPPLE_func = (PFNGLBINDVERTEXARRAYAPPLEPROC) glutGetProcAddress("glBindVertexArrayAPPLE"); |
| glDeleteVertexArraysAPPLE_func = (PFNGLDELETEVERTEXARRAYSAPPLEPROC) glutGetProcAddress("glDeleteVertexArraysAPPLE"); |
| glGenVertexArraysAPPLE_func = (PFNGLGENVERTEXARRAYSAPPLEPROC) glutGetProcAddress("glGenVertexArraysAPPLE"); |
| glIsVertexArrayAPPLE_func = (PFNGLISVERTEXARRAYAPPLEPROC) glutGetProcAddress("glIsVertexArrayAPPLE"); |
| |
| /* GL_EXT_stencil_two_side */ |
| glActiveStencilFaceEXT_func = (PFNGLACTIVESTENCILFACEEXTPROC) glutGetProcAddress("glActiveStencilFaceEXT"); |
| } |
| |