| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 1 | /** |
| 2 | * Utility for getting OpenGL extension function pointers |
| 3 | * Meant to be #included. |
| 4 | */ |
| 5 | |
| 6 | /* OpenGL 2.0 */ |
| 7 | static PFNGLATTACHSHADERPROC glAttachShader_func = NULL; |
| Brian | cc858bf | 2007-01-09 17:49:53 -0700 | [diff] [blame] | 8 | static PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation_func = NULL; |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 9 | static PFNGLCOMPILESHADERPROC glCompileShader_func = NULL; |
| 10 | static PFNGLCREATEPROGRAMPROC glCreateProgram_func = NULL; |
| 11 | static PFNGLCREATESHADERPROC glCreateShader_func = NULL; |
| 12 | static PFNGLDELETEPROGRAMPROC glDeleteProgram_func = NULL; |
| 13 | static PFNGLDELETESHADERPROC glDeleteShader_func = NULL; |
| Brian | 02e958a | 2007-04-27 16:27:36 -0600 | [diff] [blame] | 14 | static PFNGLGETACTIVEATTRIBPROC glGetActiveAttrib_func = NULL; |
| Brian | c3240b5 | 2008-04-04 18:55:22 -0600 | [diff] [blame^] | 15 | static PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform_func = NULL; |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 16 | static PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders_func = NULL; |
| Brian | cc858bf | 2007-01-09 17:49:53 -0700 | [diff] [blame] | 17 | static PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation_func = NULL; |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 18 | static PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog_func = NULL; |
| 19 | static PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog_func = NULL; |
| 20 | static PFNGLGETSHADERIVPROC glGetShaderiv_func = NULL; |
| 21 | static PFNGLGETPROGRAMIVPROC glGetProgramiv_func = NULL; |
| 22 | static PFNGLGETSHADERSOURCEPROC glGetShaderSource_func = NULL; |
| 23 | static PFNGLGETUNIFORMFVPROC glGetUniformfv_func = NULL; |
| 24 | static PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation_func = NULL; |
| 25 | static PFNGLISPROGRAMPROC glIsProgram_func = NULL; |
| 26 | static PFNGLISSHADERPROC glIsShader_func = NULL; |
| 27 | static PFNGLLINKPROGRAMPROC glLinkProgram_func = NULL; |
| 28 | static PFNGLSHADERSOURCEPROC glShaderSource_func = NULL; |
| Brian | 7b4d10b | 2007-01-04 14:40:56 -0700 | [diff] [blame] | 29 | static PFNGLUNIFORM1IPROC glUniform1i_func = NULL; |
| Brian | e5213be | 2007-07-29 18:28:46 -0600 | [diff] [blame] | 30 | static PFNGLUNIFORM2IPROC glUniform2i_func = NULL; |
| 31 | static PFNGLUNIFORM3IPROC glUniform3i_func = NULL; |
| 32 | static PFNGLUNIFORM4IPROC glUniform4i_func = NULL; |
| 33 | static PFNGLUNIFORM1FPROC glUniform1f_func = NULL; |
| 34 | static PFNGLUNIFORM2FPROC glUniform2f_func = NULL; |
| 35 | static PFNGLUNIFORM3FPROC glUniform3f_func = NULL; |
| 36 | static PFNGLUNIFORM4FPROC glUniform4f_func = NULL; |
| Brian | 64414ea | 2007-01-13 14:51:02 -0700 | [diff] [blame] | 37 | static PFNGLUNIFORM1FVPROC glUniform1fv_func = NULL; |
| 38 | static PFNGLUNIFORM2FVPROC glUniform2fv_func = NULL; |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 39 | static PFNGLUNIFORM3FVPROC glUniform3fv_func = NULL; |
| Brian | 7b4d10b | 2007-01-04 14:40:56 -0700 | [diff] [blame] | 40 | static PFNGLUNIFORM4FVPROC glUniform4fv_func = NULL; |
| Brian | 1ff1e89 | 2006-12-20 17:56:29 -0700 | [diff] [blame] | 41 | static PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv_func = NULL; |
| 42 | static PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv_func = NULL; |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 43 | static PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv_func = NULL; |
| 44 | static PFNGLUSEPROGRAMPROC glUseProgram_func = NULL; |
| Brian | 9d0ae96 | 2007-01-16 14:57:12 -0700 | [diff] [blame] | 45 | static PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f_func = NULL; |
| Brian | cc858bf | 2007-01-09 17:49:53 -0700 | [diff] [blame] | 46 | static PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f_func = NULL; |
| Brian | 9d0ae96 | 2007-01-16 14:57:12 -0700 | [diff] [blame] | 47 | static PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f_func = NULL; |
| 48 | static PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f_func = NULL; |
| Brian | cc858bf | 2007-01-09 17:49:53 -0700 | [diff] [blame] | 49 | |
| Brian | 0d3d930 | 2007-04-08 15:41:02 -0600 | [diff] [blame] | 50 | /* OpenGL 2.1 */ |
| 51 | static PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv_func = NULL; |
| 52 | static PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv_func = NULL; |
| 53 | static PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv_func = NULL; |
| 54 | static PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv_func = NULL; |
| 55 | static PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv_func = NULL; |
| 56 | static PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv_func = NULL; |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 57 | |
| Brian | e5213be | 2007-07-29 18:28:46 -0600 | [diff] [blame] | 58 | /* OpenGL 1.4 */ |
| 59 | static PFNGLPOINTPARAMETERFVPROC glPointParameterfv_func = NULL; |
| Brian | 88f1419 | 2007-12-18 16:30:42 -0700 | [diff] [blame] | 60 | static PFNGLSECONDARYCOLOR3FVPROC glSecondaryColor3fv_func = NULL; |
| Brian | e5213be | 2007-07-29 18:28:46 -0600 | [diff] [blame] | 61 | |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 62 | /* GL_ARB_vertex/fragment_program */ |
| 63 | static PFNGLBINDPROGRAMARBPROC glBindProgramARB_func = NULL; |
| 64 | static PFNGLDELETEPROGRAMSARBPROC glDeleteProgramsARB_func = NULL; |
| 65 | static PFNGLGENPROGRAMSARBPROC glGenProgramsARB_func = NULL; |
| 66 | static PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glGetProgramLocalParameterdvARB_func = NULL; |
| 67 | static PFNGLISPROGRAMARBPROC glIsProgramARB_func = NULL; |
| 68 | static PFNGLPROGRAMLOCALPARAMETER4DARBPROC glProgramLocalParameter4dARB_func = NULL; |
| 69 | static PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glProgramLocalParameter4fvARB_func = NULL; |
| 70 | static PFNGLPROGRAMSTRINGARBPROC glProgramStringARB_func = NULL; |
| 71 | static PFNGLVERTEXATTRIB1FARBPROC glVertexAttrib1fARB_func = NULL; |
| 72 | |
| 73 | /* GL_APPLE_vertex_array_object */ |
| 74 | static PFNGLBINDVERTEXARRAYAPPLEPROC glBindVertexArrayAPPLE_func = NULL; |
| 75 | static PFNGLDELETEVERTEXARRAYSAPPLEPROC glDeleteVertexArraysAPPLE_func = NULL; |
| 76 | static PFNGLGENVERTEXARRAYSAPPLEPROC glGenVertexArraysAPPLE_func = NULL; |
| 77 | static PFNGLISVERTEXARRAYAPPLEPROC glIsVertexArrayAPPLE_func = NULL; |
| 78 | |
| Brian | 8f3fc52 | 2007-04-07 08:38:36 -0600 | [diff] [blame] | 79 | /* GL_EXT_stencil_two_side */ |
| 80 | static PFNGLACTIVESTENCILFACEEXTPROC glActiveStencilFaceEXT_func = NULL; |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 81 | |
| 82 | |
| 83 | static void |
| 84 | GetExtensionFuncs(void) |
| 85 | { |
| 86 | /* OpenGL 2.0 */ |
| 87 | glAttachShader_func = (PFNGLATTACHSHADERPROC) glutGetProcAddress("glAttachShader"); |
| Brian | cc858bf | 2007-01-09 17:49:53 -0700 | [diff] [blame] | 88 | glBindAttribLocation_func = (PFNGLBINDATTRIBLOCATIONPROC) glutGetProcAddress("glBindAttribLocation"); |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 89 | glCompileShader_func = (PFNGLCOMPILESHADERPROC) glutGetProcAddress("glCompileShader"); |
| 90 | glCreateProgram_func = (PFNGLCREATEPROGRAMPROC) glutGetProcAddress("glCreateProgram"); |
| 91 | glCreateShader_func = (PFNGLCREATESHADERPROC) glutGetProcAddress("glCreateShader"); |
| 92 | glDeleteProgram_func = (PFNGLDELETEPROGRAMPROC) glutGetProcAddress("glDeleteProgram"); |
| 93 | glDeleteShader_func = (PFNGLDELETESHADERPROC) glutGetProcAddress("glDeleteShader"); |
| Brian | 02e958a | 2007-04-27 16:27:36 -0600 | [diff] [blame] | 94 | glGetActiveAttrib_func = (PFNGLGETACTIVEATTRIBPROC) glutGetProcAddress("glGetActiveAttrib"); |
| Brian | c3240b5 | 2008-04-04 18:55:22 -0600 | [diff] [blame^] | 95 | glGetActiveUniform_func = (PFNGLGETACTIVEUNIFORMPROC) glutGetProcAddress("glGetActiveUniform"); |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 96 | glGetAttachedShaders_func = (PFNGLGETATTACHEDSHADERSPROC) glutGetProcAddress("glGetAttachedShaders"); |
| Brian | cc858bf | 2007-01-09 17:49:53 -0700 | [diff] [blame] | 97 | glGetAttribLocation_func = (PFNGLGETATTRIBLOCATIONPROC) glutGetProcAddress("glGetAttribLocation"); |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 98 | glGetProgramInfoLog_func = (PFNGLGETPROGRAMINFOLOGPROC) glutGetProcAddress("glGetProgramInfoLog"); |
| 99 | glGetShaderInfoLog_func = (PFNGLGETSHADERINFOLOGPROC) glutGetProcAddress("glGetShaderInfoLog"); |
| 100 | glGetProgramiv_func = (PFNGLGETPROGRAMIVPROC) glutGetProcAddress("glGetProgramiv"); |
| 101 | glGetShaderiv_func = (PFNGLGETSHADERIVPROC) glutGetProcAddress("glGetShaderiv"); |
| 102 | glGetShaderSource_func = (PFNGLGETSHADERSOURCEPROC) glutGetProcAddress("glGetShaderSource"); |
| 103 | glGetUniformLocation_func = (PFNGLGETUNIFORMLOCATIONPROC) glutGetProcAddress("glGetUniformLocation"); |
| 104 | glGetUniformfv_func = (PFNGLGETUNIFORMFVPROC) glutGetProcAddress("glGetUniformfv"); |
| 105 | glIsProgram_func = (PFNGLISPROGRAMPROC) glutGetProcAddress("glIsProgram"); |
| 106 | glIsShader_func = (PFNGLISSHADERPROC) glutGetProcAddress("glIsShader"); |
| 107 | glLinkProgram_func = (PFNGLLINKPROGRAMPROC) glutGetProcAddress("glLinkProgram"); |
| 108 | glShaderSource_func = (PFNGLSHADERSOURCEPROC) glutGetProcAddress("glShaderSource"); |
| Brian | 7b4d10b | 2007-01-04 14:40:56 -0700 | [diff] [blame] | 109 | glUniform1i_func = (PFNGLUNIFORM1IPROC) glutGetProcAddress("glUniform1i"); |
| Brian | e5213be | 2007-07-29 18:28:46 -0600 | [diff] [blame] | 110 | glUniform2i_func = (PFNGLUNIFORM2IPROC) glutGetProcAddress("glUniform2i"); |
| 111 | glUniform3i_func = (PFNGLUNIFORM3IPROC) glutGetProcAddress("glUniform3i"); |
| 112 | glUniform4i_func = (PFNGLUNIFORM4IPROC) glutGetProcAddress("glUniform3i"); |
| 113 | glUniform1f_func = (PFNGLUNIFORM1FPROC) glutGetProcAddress("glUniform1f"); |
| 114 | glUniform2f_func = (PFNGLUNIFORM2FPROC) glutGetProcAddress("glUniform2f"); |
| 115 | glUniform3f_func = (PFNGLUNIFORM3FPROC) glutGetProcAddress("glUniform3f"); |
| Brian | 6c0fc07 | 2007-12-24 17:05:39 -0700 | [diff] [blame] | 116 | glUniform4f_func = (PFNGLUNIFORM4FPROC) glutGetProcAddress("glUniform4f"); |
| Brian | 64414ea | 2007-01-13 14:51:02 -0700 | [diff] [blame] | 117 | glUniform1fv_func = (PFNGLUNIFORM1FVPROC) glutGetProcAddress("glUniform1fv"); |
| 118 | glUniform2fv_func = (PFNGLUNIFORM2FVPROC) glutGetProcAddress("glUniform2fv"); |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 119 | glUniform3fv_func = (PFNGLUNIFORM3FVPROC) glutGetProcAddress("glUniform3fv"); |
| 120 | glUniform4fv_func = (PFNGLUNIFORM3FVPROC) glutGetProcAddress("glUniform4fv"); |
| Brian | 1ff1e89 | 2006-12-20 17:56:29 -0700 | [diff] [blame] | 121 | glUniformMatrix2fv_func = (PFNGLUNIFORMMATRIX2FVPROC) glutGetProcAddress("glUniformMatrix2fv"); |
| 122 | glUniformMatrix3fv_func = (PFNGLUNIFORMMATRIX3FVPROC) glutGetProcAddress("glUniformMatrix3fv"); |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 123 | glUniformMatrix4fv_func = (PFNGLUNIFORMMATRIX4FVPROC) glutGetProcAddress("glUniformMatrix4fv"); |
| 124 | glUseProgram_func = (PFNGLUSEPROGRAMPROC) glutGetProcAddress("glUseProgram"); |
| Brian | 9d0ae96 | 2007-01-16 14:57:12 -0700 | [diff] [blame] | 125 | glVertexAttrib1f_func = (PFNGLVERTEXATTRIB1FPROC) glutGetProcAddress("glVertexAttrib1f"); |
| Brian | cc858bf | 2007-01-09 17:49:53 -0700 | [diff] [blame] | 126 | glVertexAttrib2f_func = (PFNGLVERTEXATTRIB2FPROC) glutGetProcAddress("glVertexAttrib2f"); |
| Brian | 9d0ae96 | 2007-01-16 14:57:12 -0700 | [diff] [blame] | 127 | glVertexAttrib3f_func = (PFNGLVERTEXATTRIB3FPROC) glutGetProcAddress("glVertexAttrib3f"); |
| 128 | glVertexAttrib4f_func = (PFNGLVERTEXATTRIB4FPROC) glutGetProcAddress("glVertexAttrib4f"); |
| Brian | cc858bf | 2007-01-09 17:49:53 -0700 | [diff] [blame] | 129 | |
| Brian | 0d3d930 | 2007-04-08 15:41:02 -0600 | [diff] [blame] | 130 | /* OpenGL 2.1 */ |
| 131 | glUniformMatrix2x3fv_func = (PFNGLUNIFORMMATRIX2X3FVPROC) glutGetProcAddress("glUniformMatrix2x3fv"); |
| 132 | glUniformMatrix3x2fv_func = (PFNGLUNIFORMMATRIX3X2FVPROC) glutGetProcAddress("glUniformMatrix3x2fv"); |
| 133 | glUniformMatrix2x4fv_func = (PFNGLUNIFORMMATRIX2X4FVPROC) glutGetProcAddress("glUniformMatrix2x4fv"); |
| 134 | glUniformMatrix4x2fv_func = (PFNGLUNIFORMMATRIX4X2FVPROC) glutGetProcAddress("glUniformMatrix4x2fv"); |
| 135 | glUniformMatrix3x4fv_func = (PFNGLUNIFORMMATRIX3X4FVPROC) glutGetProcAddress("glUniformMatrix3x4fv"); |
| 136 | glUniformMatrix4x3fv_func = (PFNGLUNIFORMMATRIX4X3FVPROC) glutGetProcAddress("glUniformMatrix4x3fv"); |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 137 | |
| Brian | 88f1419 | 2007-12-18 16:30:42 -0700 | [diff] [blame] | 138 | /* OpenGL 1.4 */ |
| Brian | e5213be | 2007-07-29 18:28:46 -0600 | [diff] [blame] | 139 | glPointParameterfv_func = (PFNGLPOINTPARAMETERFVPROC) glutGetProcAddress("glPointParameterfv"); |
| Brian | 88f1419 | 2007-12-18 16:30:42 -0700 | [diff] [blame] | 140 | glSecondaryColor3fv_func = (PFNGLSECONDARYCOLOR3FVPROC) glutGetProcAddress("glSecondaryColor3fv"); |
| Brian | e5213be | 2007-07-29 18:28:46 -0600 | [diff] [blame] | 141 | |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 142 | /* GL_ARB_vertex/fragment_program */ |
| 143 | glBindProgramARB_func = (PFNGLBINDPROGRAMARBPROC) glutGetProcAddress("glBindProgramARB"); |
| 144 | glDeleteProgramsARB_func = (PFNGLDELETEPROGRAMSARBPROC) glutGetProcAddress("glDeleteProgramsARB"); |
| 145 | glGenProgramsARB_func = (PFNGLGENPROGRAMSARBPROC) glutGetProcAddress("glGenProgramsARB"); |
| 146 | glGetProgramLocalParameterdvARB_func = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) glutGetProcAddress("glGetProgramLocalParameterdvARB"); |
| 147 | glIsProgramARB_func = (PFNGLISPROGRAMARBPROC) glutGetProcAddress("glIsProgramARB"); |
| 148 | glProgramLocalParameter4dARB_func = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC) glutGetProcAddress("glProgramLocalParameter4dARB"); |
| 149 | glProgramLocalParameter4fvARB_func = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) glutGetProcAddress("glProgramLocalParameter4fvARB"); |
| 150 | glProgramStringARB_func = (PFNGLPROGRAMSTRINGARBPROC) glutGetProcAddress("glProgramStringARB"); |
| 151 | glVertexAttrib1fARB_func = (PFNGLVERTEXATTRIB1FARBPROC) glutGetProcAddress("glVertexAttrib1fARB"); |
| 152 | |
| 153 | /* GL_APPLE_vertex_array_object */ |
| 154 | glBindVertexArrayAPPLE_func = (PFNGLBINDVERTEXARRAYAPPLEPROC) glutGetProcAddress("glBindVertexArrayAPPLE"); |
| 155 | glDeleteVertexArraysAPPLE_func = (PFNGLDELETEVERTEXARRAYSAPPLEPROC) glutGetProcAddress("glDeleteVertexArraysAPPLE"); |
| 156 | glGenVertexArraysAPPLE_func = (PFNGLGENVERTEXARRAYSAPPLEPROC) glutGetProcAddress("glGenVertexArraysAPPLE"); |
| 157 | glIsVertexArrayAPPLE_func = (PFNGLISVERTEXARRAYAPPLEPROC) glutGetProcAddress("glIsVertexArrayAPPLE"); |
| 158 | |
| Brian | 8f3fc52 | 2007-04-07 08:38:36 -0600 | [diff] [blame] | 159 | /* GL_EXT_stencil_two_side */ |
| 160 | glActiveStencilFaceEXT_func = (PFNGLACTIVESTENCILFACEEXTPROC) glutGetProcAddress("glActiveStencilFaceEXT"); |
| Brian | e55b771 | 2006-12-15 09:30:31 -0700 | [diff] [blame] | 161 | } |
| 162 | |