blob: 4e8af50d34fd08ab303f4d9eab9e53b5554454fa [file] [log] [blame]
Briane55b7712006-12-15 09:30:31 -07001/**
2 * Utility for getting OpenGL extension function pointers
3 * Meant to be #included.
4 */
5
6/* OpenGL 2.0 */
7static PFNGLATTACHSHADERPROC glAttachShader_func = NULL;
Briancc858bf2007-01-09 17:49:53 -07008static PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation_func = NULL;
Briane55b7712006-12-15 09:30:31 -07009static PFNGLCOMPILESHADERPROC glCompileShader_func = NULL;
10static PFNGLCREATEPROGRAMPROC glCreateProgram_func = NULL;
11static PFNGLCREATESHADERPROC glCreateShader_func = NULL;
12static PFNGLDELETEPROGRAMPROC glDeleteProgram_func = NULL;
13static PFNGLDELETESHADERPROC glDeleteShader_func = NULL;
Brian02e958a2007-04-27 16:27:36 -060014static PFNGLGETACTIVEATTRIBPROC glGetActiveAttrib_func = NULL;
Briane55b7712006-12-15 09:30:31 -070015static PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders_func = NULL;
Briancc858bf2007-01-09 17:49:53 -070016static PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation_func = NULL;
Briane55b7712006-12-15 09:30:31 -070017static PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog_func = NULL;
18static PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog_func = NULL;
19static PFNGLGETSHADERIVPROC glGetShaderiv_func = NULL;
20static PFNGLGETPROGRAMIVPROC glGetProgramiv_func = NULL;
21static PFNGLGETSHADERSOURCEPROC glGetShaderSource_func = NULL;
22static PFNGLGETUNIFORMFVPROC glGetUniformfv_func = NULL;
23static PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation_func = NULL;
24static PFNGLISPROGRAMPROC glIsProgram_func = NULL;
25static PFNGLISSHADERPROC glIsShader_func = NULL;
26static PFNGLLINKPROGRAMPROC glLinkProgram_func = NULL;
27static PFNGLSHADERSOURCEPROC glShaderSource_func = NULL;
Brian7b4d10b2007-01-04 14:40:56 -070028static PFNGLUNIFORM1IPROC glUniform1i_func = NULL;
Briane5213be2007-07-29 18:28:46 -060029static PFNGLUNIFORM2IPROC glUniform2i_func = NULL;
30static PFNGLUNIFORM3IPROC glUniform3i_func = NULL;
31static PFNGLUNIFORM4IPROC glUniform4i_func = NULL;
32static PFNGLUNIFORM1FPROC glUniform1f_func = NULL;
33static PFNGLUNIFORM2FPROC glUniform2f_func = NULL;
34static PFNGLUNIFORM3FPROC glUniform3f_func = NULL;
35static PFNGLUNIFORM4FPROC glUniform4f_func = NULL;
Brian64414ea2007-01-13 14:51:02 -070036static PFNGLUNIFORM1FVPROC glUniform1fv_func = NULL;
37static PFNGLUNIFORM2FVPROC glUniform2fv_func = NULL;
Briane55b7712006-12-15 09:30:31 -070038static PFNGLUNIFORM3FVPROC glUniform3fv_func = NULL;
Brian7b4d10b2007-01-04 14:40:56 -070039static PFNGLUNIFORM4FVPROC glUniform4fv_func = NULL;
Brian1ff1e892006-12-20 17:56:29 -070040static PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv_func = NULL;
41static PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv_func = NULL;
Briane55b7712006-12-15 09:30:31 -070042static PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv_func = NULL;
43static PFNGLUSEPROGRAMPROC glUseProgram_func = NULL;
Brian9d0ae962007-01-16 14:57:12 -070044static PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f_func = NULL;
Briancc858bf2007-01-09 17:49:53 -070045static PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f_func = NULL;
Brian9d0ae962007-01-16 14:57:12 -070046static PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f_func = NULL;
47static PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f_func = NULL;
Briancc858bf2007-01-09 17:49:53 -070048
Brian0d3d9302007-04-08 15:41:02 -060049/* OpenGL 2.1 */
50static PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv_func = NULL;
51static PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv_func = NULL;
52static PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv_func = NULL;
53static PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv_func = NULL;
54static PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv_func = NULL;
55static PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv_func = NULL;
Briane55b7712006-12-15 09:30:31 -070056
Briane5213be2007-07-29 18:28:46 -060057/* OpenGL 1.4 */
58static PFNGLPOINTPARAMETERFVPROC glPointParameterfv_func = NULL;
Brian88f14192007-12-18 16:30:42 -070059static PFNGLSECONDARYCOLOR3FVPROC glSecondaryColor3fv_func = NULL;
Briane5213be2007-07-29 18:28:46 -060060
Briane55b7712006-12-15 09:30:31 -070061/* GL_ARB_vertex/fragment_program */
62static PFNGLBINDPROGRAMARBPROC glBindProgramARB_func = NULL;
63static PFNGLDELETEPROGRAMSARBPROC glDeleteProgramsARB_func = NULL;
64static PFNGLGENPROGRAMSARBPROC glGenProgramsARB_func = NULL;
65static PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glGetProgramLocalParameterdvARB_func = NULL;
66static PFNGLISPROGRAMARBPROC glIsProgramARB_func = NULL;
67static PFNGLPROGRAMLOCALPARAMETER4DARBPROC glProgramLocalParameter4dARB_func = NULL;
68static PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glProgramLocalParameter4fvARB_func = NULL;
69static PFNGLPROGRAMSTRINGARBPROC glProgramStringARB_func = NULL;
70static PFNGLVERTEXATTRIB1FARBPROC glVertexAttrib1fARB_func = NULL;
71
72/* GL_APPLE_vertex_array_object */
73static PFNGLBINDVERTEXARRAYAPPLEPROC glBindVertexArrayAPPLE_func = NULL;
74static PFNGLDELETEVERTEXARRAYSAPPLEPROC glDeleteVertexArraysAPPLE_func = NULL;
75static PFNGLGENVERTEXARRAYSAPPLEPROC glGenVertexArraysAPPLE_func = NULL;
76static PFNGLISVERTEXARRAYAPPLEPROC glIsVertexArrayAPPLE_func = NULL;
77
Brian8f3fc522007-04-07 08:38:36 -060078/* GL_EXT_stencil_two_side */
79static PFNGLACTIVESTENCILFACEEXTPROC glActiveStencilFaceEXT_func = NULL;
Briane55b7712006-12-15 09:30:31 -070080
81
82static void
83GetExtensionFuncs(void)
84{
85 /* OpenGL 2.0 */
86 glAttachShader_func = (PFNGLATTACHSHADERPROC) glutGetProcAddress("glAttachShader");
Briancc858bf2007-01-09 17:49:53 -070087 glBindAttribLocation_func = (PFNGLBINDATTRIBLOCATIONPROC) glutGetProcAddress("glBindAttribLocation");
Briane55b7712006-12-15 09:30:31 -070088 glCompileShader_func = (PFNGLCOMPILESHADERPROC) glutGetProcAddress("glCompileShader");
89 glCreateProgram_func = (PFNGLCREATEPROGRAMPROC) glutGetProcAddress("glCreateProgram");
90 glCreateShader_func = (PFNGLCREATESHADERPROC) glutGetProcAddress("glCreateShader");
91 glDeleteProgram_func = (PFNGLDELETEPROGRAMPROC) glutGetProcAddress("glDeleteProgram");
92 glDeleteShader_func = (PFNGLDELETESHADERPROC) glutGetProcAddress("glDeleteShader");
Brian02e958a2007-04-27 16:27:36 -060093 glGetActiveAttrib_func = (PFNGLGETACTIVEATTRIBPROC) glutGetProcAddress("glGetActiveAttrib");
Briane55b7712006-12-15 09:30:31 -070094 glGetAttachedShaders_func = (PFNGLGETATTACHEDSHADERSPROC) glutGetProcAddress("glGetAttachedShaders");
Briancc858bf2007-01-09 17:49:53 -070095 glGetAttribLocation_func = (PFNGLGETATTRIBLOCATIONPROC) glutGetProcAddress("glGetAttribLocation");
Briane55b7712006-12-15 09:30:31 -070096 glGetProgramInfoLog_func = (PFNGLGETPROGRAMINFOLOGPROC) glutGetProcAddress("glGetProgramInfoLog");
97 glGetShaderInfoLog_func = (PFNGLGETSHADERINFOLOGPROC) glutGetProcAddress("glGetShaderInfoLog");
98 glGetProgramiv_func = (PFNGLGETPROGRAMIVPROC) glutGetProcAddress("glGetProgramiv");
99 glGetShaderiv_func = (PFNGLGETSHADERIVPROC) glutGetProcAddress("glGetShaderiv");
100 glGetShaderSource_func = (PFNGLGETSHADERSOURCEPROC) glutGetProcAddress("glGetShaderSource");
101 glGetUniformLocation_func = (PFNGLGETUNIFORMLOCATIONPROC) glutGetProcAddress("glGetUniformLocation");
102 glGetUniformfv_func = (PFNGLGETUNIFORMFVPROC) glutGetProcAddress("glGetUniformfv");
103 glIsProgram_func = (PFNGLISPROGRAMPROC) glutGetProcAddress("glIsProgram");
104 glIsShader_func = (PFNGLISSHADERPROC) glutGetProcAddress("glIsShader");
105 glLinkProgram_func = (PFNGLLINKPROGRAMPROC) glutGetProcAddress("glLinkProgram");
106 glShaderSource_func = (PFNGLSHADERSOURCEPROC) glutGetProcAddress("glShaderSource");
Brian7b4d10b2007-01-04 14:40:56 -0700107 glUniform1i_func = (PFNGLUNIFORM1IPROC) glutGetProcAddress("glUniform1i");
Briane5213be2007-07-29 18:28:46 -0600108 glUniform2i_func = (PFNGLUNIFORM2IPROC) glutGetProcAddress("glUniform2i");
109 glUniform3i_func = (PFNGLUNIFORM3IPROC) glutGetProcAddress("glUniform3i");
110 glUniform4i_func = (PFNGLUNIFORM4IPROC) glutGetProcAddress("glUniform3i");
111 glUniform1f_func = (PFNGLUNIFORM1FPROC) glutGetProcAddress("glUniform1f");
112 glUniform2f_func = (PFNGLUNIFORM2FPROC) glutGetProcAddress("glUniform2f");
113 glUniform3f_func = (PFNGLUNIFORM3FPROC) glutGetProcAddress("glUniform3f");
114 glUniform4f_func = (PFNGLUNIFORM4FPROC) glutGetProcAddress("glUniform3f");
Brian64414ea2007-01-13 14:51:02 -0700115 glUniform1fv_func = (PFNGLUNIFORM1FVPROC) glutGetProcAddress("glUniform1fv");
116 glUniform2fv_func = (PFNGLUNIFORM2FVPROC) glutGetProcAddress("glUniform2fv");
Briane55b7712006-12-15 09:30:31 -0700117 glUniform3fv_func = (PFNGLUNIFORM3FVPROC) glutGetProcAddress("glUniform3fv");
118 glUniform4fv_func = (PFNGLUNIFORM3FVPROC) glutGetProcAddress("glUniform4fv");
Brian1ff1e892006-12-20 17:56:29 -0700119 glUniformMatrix2fv_func = (PFNGLUNIFORMMATRIX2FVPROC) glutGetProcAddress("glUniformMatrix2fv");
120 glUniformMatrix3fv_func = (PFNGLUNIFORMMATRIX3FVPROC) glutGetProcAddress("glUniformMatrix3fv");
Briane55b7712006-12-15 09:30:31 -0700121 glUniformMatrix4fv_func = (PFNGLUNIFORMMATRIX4FVPROC) glutGetProcAddress("glUniformMatrix4fv");
122 glUseProgram_func = (PFNGLUSEPROGRAMPROC) glutGetProcAddress("glUseProgram");
Brian9d0ae962007-01-16 14:57:12 -0700123 glVertexAttrib1f_func = (PFNGLVERTEXATTRIB1FPROC) glutGetProcAddress("glVertexAttrib1f");
Briancc858bf2007-01-09 17:49:53 -0700124 glVertexAttrib2f_func = (PFNGLVERTEXATTRIB2FPROC) glutGetProcAddress("glVertexAttrib2f");
Brian9d0ae962007-01-16 14:57:12 -0700125 glVertexAttrib3f_func = (PFNGLVERTEXATTRIB3FPROC) glutGetProcAddress("glVertexAttrib3f");
126 glVertexAttrib4f_func = (PFNGLVERTEXATTRIB4FPROC) glutGetProcAddress("glVertexAttrib4f");
Briancc858bf2007-01-09 17:49:53 -0700127
Brian0d3d9302007-04-08 15:41:02 -0600128 /* OpenGL 2.1 */
129 glUniformMatrix2x3fv_func = (PFNGLUNIFORMMATRIX2X3FVPROC) glutGetProcAddress("glUniformMatrix2x3fv");
130 glUniformMatrix3x2fv_func = (PFNGLUNIFORMMATRIX3X2FVPROC) glutGetProcAddress("glUniformMatrix3x2fv");
131 glUniformMatrix2x4fv_func = (PFNGLUNIFORMMATRIX2X4FVPROC) glutGetProcAddress("glUniformMatrix2x4fv");
132 glUniformMatrix4x2fv_func = (PFNGLUNIFORMMATRIX4X2FVPROC) glutGetProcAddress("glUniformMatrix4x2fv");
133 glUniformMatrix3x4fv_func = (PFNGLUNIFORMMATRIX3X4FVPROC) glutGetProcAddress("glUniformMatrix3x4fv");
134 glUniformMatrix4x3fv_func = (PFNGLUNIFORMMATRIX4X3FVPROC) glutGetProcAddress("glUniformMatrix4x3fv");
Briane55b7712006-12-15 09:30:31 -0700135
Brian88f14192007-12-18 16:30:42 -0700136 /* OpenGL 1.4 */
Briane5213be2007-07-29 18:28:46 -0600137 glPointParameterfv_func = (PFNGLPOINTPARAMETERFVPROC) glutGetProcAddress("glPointParameterfv");
Brian88f14192007-12-18 16:30:42 -0700138 glSecondaryColor3fv_func = (PFNGLSECONDARYCOLOR3FVPROC) glutGetProcAddress("glSecondaryColor3fv");
Briane5213be2007-07-29 18:28:46 -0600139
Briane55b7712006-12-15 09:30:31 -0700140 /* GL_ARB_vertex/fragment_program */
141 glBindProgramARB_func = (PFNGLBINDPROGRAMARBPROC) glutGetProcAddress("glBindProgramARB");
142 glDeleteProgramsARB_func = (PFNGLDELETEPROGRAMSARBPROC) glutGetProcAddress("glDeleteProgramsARB");
143 glGenProgramsARB_func = (PFNGLGENPROGRAMSARBPROC) glutGetProcAddress("glGenProgramsARB");
144 glGetProgramLocalParameterdvARB_func = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) glutGetProcAddress("glGetProgramLocalParameterdvARB");
145 glIsProgramARB_func = (PFNGLISPROGRAMARBPROC) glutGetProcAddress("glIsProgramARB");
146 glProgramLocalParameter4dARB_func = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC) glutGetProcAddress("glProgramLocalParameter4dARB");
147 glProgramLocalParameter4fvARB_func = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) glutGetProcAddress("glProgramLocalParameter4fvARB");
148 glProgramStringARB_func = (PFNGLPROGRAMSTRINGARBPROC) glutGetProcAddress("glProgramStringARB");
149 glVertexAttrib1fARB_func = (PFNGLVERTEXATTRIB1FARBPROC) glutGetProcAddress("glVertexAttrib1fARB");
150
151 /* GL_APPLE_vertex_array_object */
152 glBindVertexArrayAPPLE_func = (PFNGLBINDVERTEXARRAYAPPLEPROC) glutGetProcAddress("glBindVertexArrayAPPLE");
153 glDeleteVertexArraysAPPLE_func = (PFNGLDELETEVERTEXARRAYSAPPLEPROC) glutGetProcAddress("glDeleteVertexArraysAPPLE");
154 glGenVertexArraysAPPLE_func = (PFNGLGENVERTEXARRAYSAPPLEPROC) glutGetProcAddress("glGenVertexArraysAPPLE");
155 glIsVertexArrayAPPLE_func = (PFNGLISVERTEXARRAYAPPLEPROC) glutGetProcAddress("glIsVertexArrayAPPLE");
156
Brian8f3fc522007-04-07 08:38:36 -0600157 /* GL_EXT_stencil_two_side */
158 glActiveStencilFaceEXT_func = (PFNGLACTIVESTENCILFACEEXTPROC) glutGetProcAddress("glActiveStencilFaceEXT");
Briane55b7712006-12-15 09:30:31 -0700159}
160