blob: 13067cd7aeb1676477174dff2860f364ebf5193a [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;
14static PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders_func = NULL;
Briancc858bf2007-01-09 17:49:53 -070015static PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation_func = NULL;
Briane55b7712006-12-15 09:30:31 -070016static PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog_func = NULL;
17static PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog_func = NULL;
18static PFNGLGETSHADERIVPROC glGetShaderiv_func = NULL;
19static PFNGLGETPROGRAMIVPROC glGetProgramiv_func = NULL;
20static PFNGLGETSHADERSOURCEPROC glGetShaderSource_func = NULL;
21static PFNGLGETUNIFORMFVPROC glGetUniformfv_func = NULL;
22static PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation_func = NULL;
23static PFNGLISPROGRAMPROC glIsProgram_func = NULL;
24static PFNGLISSHADERPROC glIsShader_func = NULL;
25static PFNGLLINKPROGRAMPROC glLinkProgram_func = NULL;
26static PFNGLSHADERSOURCEPROC glShaderSource_func = NULL;
Brian7b4d10b2007-01-04 14:40:56 -070027static PFNGLUNIFORM1IPROC glUniform1i_func = NULL;
Brian64414ea2007-01-13 14:51:02 -070028static PFNGLUNIFORM1FVPROC glUniform1fv_func = NULL;
29static PFNGLUNIFORM2FVPROC glUniform2fv_func = NULL;
Briane55b7712006-12-15 09:30:31 -070030static PFNGLUNIFORM3FVPROC glUniform3fv_func = NULL;
Brian7b4d10b2007-01-04 14:40:56 -070031static PFNGLUNIFORM4FVPROC glUniform4fv_func = NULL;
Brian1ff1e892006-12-20 17:56:29 -070032static PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv_func = NULL;
33static PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv_func = NULL;
Briane55b7712006-12-15 09:30:31 -070034static PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv_func = NULL;
35static PFNGLUSEPROGRAMPROC glUseProgram_func = NULL;
Brian9d0ae962007-01-16 14:57:12 -070036static PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f_func = NULL;
Briancc858bf2007-01-09 17:49:53 -070037static PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f_func = NULL;
Brian9d0ae962007-01-16 14:57:12 -070038static PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f_func = NULL;
39static PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f_func = NULL;
Briancc858bf2007-01-09 17:49:53 -070040
Briane55b7712006-12-15 09:30:31 -070041
42/* GL_ARB_vertex/fragment_program */
43static PFNGLBINDPROGRAMARBPROC glBindProgramARB_func = NULL;
44static PFNGLDELETEPROGRAMSARBPROC glDeleteProgramsARB_func = NULL;
45static PFNGLGENPROGRAMSARBPROC glGenProgramsARB_func = NULL;
46static PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glGetProgramLocalParameterdvARB_func = NULL;
47static PFNGLISPROGRAMARBPROC glIsProgramARB_func = NULL;
48static PFNGLPROGRAMLOCALPARAMETER4DARBPROC glProgramLocalParameter4dARB_func = NULL;
49static PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glProgramLocalParameter4fvARB_func = NULL;
50static PFNGLPROGRAMSTRINGARBPROC glProgramStringARB_func = NULL;
51static PFNGLVERTEXATTRIB1FARBPROC glVertexAttrib1fARB_func = NULL;
52
53/* GL_APPLE_vertex_array_object */
54static PFNGLBINDVERTEXARRAYAPPLEPROC glBindVertexArrayAPPLE_func = NULL;
55static PFNGLDELETEVERTEXARRAYSAPPLEPROC glDeleteVertexArraysAPPLE_func = NULL;
56static PFNGLGENVERTEXARRAYSAPPLEPROC glGenVertexArraysAPPLE_func = NULL;
57static PFNGLISVERTEXARRAYAPPLEPROC glIsVertexArrayAPPLE_func = NULL;
58
Brian8f3fc522007-04-07 08:38:36 -060059/* GL_EXT_stencil_two_side */
60static PFNGLACTIVESTENCILFACEEXTPROC glActiveStencilFaceEXT_func = NULL;
Briane55b7712006-12-15 09:30:31 -070061
62
63static void
64GetExtensionFuncs(void)
65{
66 /* OpenGL 2.0 */
67 glAttachShader_func = (PFNGLATTACHSHADERPROC) glutGetProcAddress("glAttachShader");
Briancc858bf2007-01-09 17:49:53 -070068 glBindAttribLocation_func = (PFNGLBINDATTRIBLOCATIONPROC) glutGetProcAddress("glBindAttribLocation");
Briane55b7712006-12-15 09:30:31 -070069 glCompileShader_func = (PFNGLCOMPILESHADERPROC) glutGetProcAddress("glCompileShader");
70 glCreateProgram_func = (PFNGLCREATEPROGRAMPROC) glutGetProcAddress("glCreateProgram");
71 glCreateShader_func = (PFNGLCREATESHADERPROC) glutGetProcAddress("glCreateShader");
72 glDeleteProgram_func = (PFNGLDELETEPROGRAMPROC) glutGetProcAddress("glDeleteProgram");
73 glDeleteShader_func = (PFNGLDELETESHADERPROC) glutGetProcAddress("glDeleteShader");
74 glGetAttachedShaders_func = (PFNGLGETATTACHEDSHADERSPROC) glutGetProcAddress("glGetAttachedShaders");
Briancc858bf2007-01-09 17:49:53 -070075 glGetAttribLocation_func = (PFNGLGETATTRIBLOCATIONPROC) glutGetProcAddress("glGetAttribLocation");
Briane55b7712006-12-15 09:30:31 -070076 glGetProgramInfoLog_func = (PFNGLGETPROGRAMINFOLOGPROC) glutGetProcAddress("glGetProgramInfoLog");
77 glGetShaderInfoLog_func = (PFNGLGETSHADERINFOLOGPROC) glutGetProcAddress("glGetShaderInfoLog");
78 glGetProgramiv_func = (PFNGLGETPROGRAMIVPROC) glutGetProcAddress("glGetProgramiv");
79 glGetShaderiv_func = (PFNGLGETSHADERIVPROC) glutGetProcAddress("glGetShaderiv");
80 glGetShaderSource_func = (PFNGLGETSHADERSOURCEPROC) glutGetProcAddress("glGetShaderSource");
81 glGetUniformLocation_func = (PFNGLGETUNIFORMLOCATIONPROC) glutGetProcAddress("glGetUniformLocation");
82 glGetUniformfv_func = (PFNGLGETUNIFORMFVPROC) glutGetProcAddress("glGetUniformfv");
83 glIsProgram_func = (PFNGLISPROGRAMPROC) glutGetProcAddress("glIsProgram");
84 glIsShader_func = (PFNGLISSHADERPROC) glutGetProcAddress("glIsShader");
85 glLinkProgram_func = (PFNGLLINKPROGRAMPROC) glutGetProcAddress("glLinkProgram");
86 glShaderSource_func = (PFNGLSHADERSOURCEPROC) glutGetProcAddress("glShaderSource");
Brian7b4d10b2007-01-04 14:40:56 -070087 glUniform1i_func = (PFNGLUNIFORM1IPROC) glutGetProcAddress("glUniform1i");
Brian64414ea2007-01-13 14:51:02 -070088 glUniform1fv_func = (PFNGLUNIFORM1FVPROC) glutGetProcAddress("glUniform1fv");
89 glUniform2fv_func = (PFNGLUNIFORM2FVPROC) glutGetProcAddress("glUniform2fv");
Briane55b7712006-12-15 09:30:31 -070090 glUniform3fv_func = (PFNGLUNIFORM3FVPROC) glutGetProcAddress("glUniform3fv");
91 glUniform4fv_func = (PFNGLUNIFORM3FVPROC) glutGetProcAddress("glUniform4fv");
Brian1ff1e892006-12-20 17:56:29 -070092 glUniformMatrix2fv_func = (PFNGLUNIFORMMATRIX2FVPROC) glutGetProcAddress("glUniformMatrix2fv");
93 glUniformMatrix3fv_func = (PFNGLUNIFORMMATRIX3FVPROC) glutGetProcAddress("glUniformMatrix3fv");
Briane55b7712006-12-15 09:30:31 -070094 glUniformMatrix4fv_func = (PFNGLUNIFORMMATRIX4FVPROC) glutGetProcAddress("glUniformMatrix4fv");
95 glUseProgram_func = (PFNGLUSEPROGRAMPROC) glutGetProcAddress("glUseProgram");
Brian9d0ae962007-01-16 14:57:12 -070096 glVertexAttrib1f_func = (PFNGLVERTEXATTRIB1FPROC) glutGetProcAddress("glVertexAttrib1f");
Briancc858bf2007-01-09 17:49:53 -070097 glVertexAttrib2f_func = (PFNGLVERTEXATTRIB2FPROC) glutGetProcAddress("glVertexAttrib2f");
Brian9d0ae962007-01-16 14:57:12 -070098 glVertexAttrib3f_func = (PFNGLVERTEXATTRIB3FPROC) glutGetProcAddress("glVertexAttrib3f");
99 glVertexAttrib4f_func = (PFNGLVERTEXATTRIB4FPROC) glutGetProcAddress("glVertexAttrib4f");
Briancc858bf2007-01-09 17:49:53 -0700100
Briane55b7712006-12-15 09:30:31 -0700101
102 /* GL_ARB_vertex/fragment_program */
103 glBindProgramARB_func = (PFNGLBINDPROGRAMARBPROC) glutGetProcAddress("glBindProgramARB");
104 glDeleteProgramsARB_func = (PFNGLDELETEPROGRAMSARBPROC) glutGetProcAddress("glDeleteProgramsARB");
105 glGenProgramsARB_func = (PFNGLGENPROGRAMSARBPROC) glutGetProcAddress("glGenProgramsARB");
106 glGetProgramLocalParameterdvARB_func = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) glutGetProcAddress("glGetProgramLocalParameterdvARB");
107 glIsProgramARB_func = (PFNGLISPROGRAMARBPROC) glutGetProcAddress("glIsProgramARB");
108 glProgramLocalParameter4dARB_func = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC) glutGetProcAddress("glProgramLocalParameter4dARB");
109 glProgramLocalParameter4fvARB_func = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) glutGetProcAddress("glProgramLocalParameter4fvARB");
110 glProgramStringARB_func = (PFNGLPROGRAMSTRINGARBPROC) glutGetProcAddress("glProgramStringARB");
111 glVertexAttrib1fARB_func = (PFNGLVERTEXATTRIB1FARBPROC) glutGetProcAddress("glVertexAttrib1fARB");
112
113 /* GL_APPLE_vertex_array_object */
114 glBindVertexArrayAPPLE_func = (PFNGLBINDVERTEXARRAYAPPLEPROC) glutGetProcAddress("glBindVertexArrayAPPLE");
115 glDeleteVertexArraysAPPLE_func = (PFNGLDELETEVERTEXARRAYSAPPLEPROC) glutGetProcAddress("glDeleteVertexArraysAPPLE");
116 glGenVertexArraysAPPLE_func = (PFNGLGENVERTEXARRAYSAPPLEPROC) glutGetProcAddress("glGenVertexArraysAPPLE");
117 glIsVertexArrayAPPLE_func = (PFNGLISVERTEXARRAYAPPLEPROC) glutGetProcAddress("glIsVertexArrayAPPLE");
118
Brian8f3fc522007-04-07 08:38:36 -0600119 /* GL_EXT_stencil_two_side */
120 glActiveStencilFaceEXT_func = (PFNGLACTIVESTENCILFACEEXTPROC) glutGetProcAddress("glActiveStencilFaceEXT");
Briane55b7712006-12-15 09:30:31 -0700121}
122