]> git.tdb.fi Git - libs/gl.git/blob - source/arb_shader_objects.cpp
Function pointer typedefs for core functions are not available everywhere
[libs/gl.git] / source / arb_shader_objects.cpp
1 #include "arb_shader_objects.h"
2
3 namespace Msp {
4 namespace GL {
5
6 PFNGLATTACHOBJECTARBPROC glAttachShader = 0;
7 PFNGLCOMPILESHADERARBPROC glCompileShader = 0;
8 PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgram = 0;
9 PFNGLCREATESHADEROBJECTARBPROC glCreateShader = 0;
10 PFNGLDELETEOBJECTARBPROC glDeleteProgram = 0;
11 PFNGLDELETEOBJECTARBPROC glDeleteShader = 0;
12 PFNGLDETACHOBJECTARBPROC glDetachShader = 0;
13 PFNGLGETACTIVEUNIFORMARBPROC glGetActiveUniform = 0;
14 PFNGLGETATTACHEDOBJECTSARBPROC glGetAttachedShaders = 0;
15 PFNGLGETINFOLOGARBPROC glGetProgramInfoLog = 0;
16 PFNGLGETOBJECTPARAMETERIVARBPROC glGetProgramiv = 0;
17 PFNGLGETINFOLOGARBPROC glGetShaderInfoLog = 0;
18 PFNGLGETSHADERSOURCEARBPROC glGetShaderSource = 0;
19 PFNGLGETOBJECTPARAMETERIVARBPROC glGetShaderiv = 0;
20 PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocation = 0;
21 PFNGLGETUNIFORMFVARBPROC glGetUniformfv = 0;
22 PFNGLGETUNIFORMIVARBPROC glGetUniformiv = 0;
23 PFNGLLINKPROGRAMARBPROC glLinkProgram = 0;
24 PFNGLSHADERSOURCEARBPROC glShaderSource = 0;
25 PFNGLUNIFORM1FARBPROC glUniform1f = 0;
26 PFNGLUNIFORM1FVARBPROC glUniform1fv = 0;
27 PFNGLUNIFORM1IARBPROC glUniform1i = 0;
28 PFNGLUNIFORM1IVARBPROC glUniform1iv = 0;
29 PFNGLUNIFORM2FARBPROC glUniform2f = 0;
30 PFNGLUNIFORM2FVARBPROC glUniform2fv = 0;
31 PFNGLUNIFORM2IARBPROC glUniform2i = 0;
32 PFNGLUNIFORM2IVARBPROC glUniform2iv = 0;
33 PFNGLUNIFORM3FARBPROC glUniform3f = 0;
34 PFNGLUNIFORM3FVARBPROC glUniform3fv = 0;
35 PFNGLUNIFORM3IARBPROC glUniform3i = 0;
36 PFNGLUNIFORM3IVARBPROC glUniform3iv = 0;
37 PFNGLUNIFORM4FARBPROC glUniform4f = 0;
38 PFNGLUNIFORM4FVARBPROC glUniform4fv = 0;
39 PFNGLUNIFORM4IARBPROC glUniform4i = 0;
40 PFNGLUNIFORM4IVARBPROC glUniform4iv = 0;
41 PFNGLUNIFORMMATRIX2FVARBPROC glUniformMatrix2fv = 0;
42 PFNGLUNIFORMMATRIX3FVARBPROC glUniformMatrix3fv = 0;
43 PFNGLUNIFORMMATRIX4FVARBPROC glUniformMatrix4fv = 0;
44 PFNGLUSEPROGRAMOBJECTARBPROC glUseProgram = 0;
45 PFNGLVALIDATEPROGRAMARBPROC glValidateProgram = 0;
46
47 Extension::SupportLevel init_arb_shader_objects()
48 {
49         if(is_version_at_least(2, 0))
50         {
51                 glAttachShader = reinterpret_cast<PFNGLATTACHOBJECTARBPROC>(get_proc_address("glAttachShader"));
52                 glCompileShader = reinterpret_cast<PFNGLCOMPILESHADERARBPROC>(get_proc_address("glCompileShader"));
53                 glCreateProgram = reinterpret_cast<PFNGLCREATEPROGRAMOBJECTARBPROC>(get_proc_address("glCreateProgram"));
54                 glCreateShader = reinterpret_cast<PFNGLCREATESHADEROBJECTARBPROC>(get_proc_address("glCreateShader"));
55                 glDeleteProgram = reinterpret_cast<PFNGLDELETEOBJECTARBPROC>(get_proc_address("glDeleteProgram"));
56                 glDeleteShader = reinterpret_cast<PFNGLDELETEOBJECTARBPROC>(get_proc_address("glDeleteShader"));
57                 glDetachShader = reinterpret_cast<PFNGLDETACHOBJECTARBPROC>(get_proc_address("glDetachShader"));
58                 glGetActiveUniform = reinterpret_cast<PFNGLGETACTIVEUNIFORMARBPROC>(get_proc_address("glGetActiveUniform"));
59                 glGetAttachedShaders = reinterpret_cast<PFNGLGETATTACHEDOBJECTSARBPROC>(get_proc_address("glGetAttachedShaders"));
60                 glGetProgramInfoLog = reinterpret_cast<PFNGLGETINFOLOGARBPROC>(get_proc_address("glGetProgramInfoLog"));
61                 glGetProgramiv = reinterpret_cast<PFNGLGETOBJECTPARAMETERIVARBPROC>(get_proc_address("glGetProgramiv"));
62                 glGetShaderInfoLog = reinterpret_cast<PFNGLGETINFOLOGARBPROC>(get_proc_address("glGetShaderInfoLog"));
63                 glGetShaderSource = reinterpret_cast<PFNGLGETSHADERSOURCEARBPROC>(get_proc_address("glGetShaderSource"));
64                 glGetShaderiv = reinterpret_cast<PFNGLGETOBJECTPARAMETERIVARBPROC>(get_proc_address("glGetShaderiv"));
65                 glGetUniformLocation = reinterpret_cast<PFNGLGETUNIFORMLOCATIONARBPROC>(get_proc_address("glGetUniformLocation"));
66                 glGetUniformfv = reinterpret_cast<PFNGLGETUNIFORMFVARBPROC>(get_proc_address("glGetUniformfv"));
67                 glGetUniformiv = reinterpret_cast<PFNGLGETUNIFORMIVARBPROC>(get_proc_address("glGetUniformiv"));
68                 glLinkProgram = reinterpret_cast<PFNGLLINKPROGRAMARBPROC>(get_proc_address("glLinkProgram"));
69                 glShaderSource = reinterpret_cast<PFNGLSHADERSOURCEARBPROC>(get_proc_address("glShaderSource"));
70                 glUniform1f = reinterpret_cast<PFNGLUNIFORM1FARBPROC>(get_proc_address("glUniform1f"));
71                 glUniform1fv = reinterpret_cast<PFNGLUNIFORM1FVARBPROC>(get_proc_address("glUniform1fv"));
72                 glUniform1i = reinterpret_cast<PFNGLUNIFORM1IARBPROC>(get_proc_address("glUniform1i"));
73                 glUniform1iv = reinterpret_cast<PFNGLUNIFORM1IVARBPROC>(get_proc_address("glUniform1iv"));
74                 glUniform2f = reinterpret_cast<PFNGLUNIFORM2FARBPROC>(get_proc_address("glUniform2f"));
75                 glUniform2fv = reinterpret_cast<PFNGLUNIFORM2FVARBPROC>(get_proc_address("glUniform2fv"));
76                 glUniform2i = reinterpret_cast<PFNGLUNIFORM2IARBPROC>(get_proc_address("glUniform2i"));
77                 glUniform2iv = reinterpret_cast<PFNGLUNIFORM2IVARBPROC>(get_proc_address("glUniform2iv"));
78                 glUniform3f = reinterpret_cast<PFNGLUNIFORM3FARBPROC>(get_proc_address("glUniform3f"));
79                 glUniform3fv = reinterpret_cast<PFNGLUNIFORM3FVARBPROC>(get_proc_address("glUniform3fv"));
80                 glUniform3i = reinterpret_cast<PFNGLUNIFORM3IARBPROC>(get_proc_address("glUniform3i"));
81                 glUniform3iv = reinterpret_cast<PFNGLUNIFORM3IVARBPROC>(get_proc_address("glUniform3iv"));
82                 glUniform4f = reinterpret_cast<PFNGLUNIFORM4FARBPROC>(get_proc_address("glUniform4f"));
83                 glUniform4fv = reinterpret_cast<PFNGLUNIFORM4FVARBPROC>(get_proc_address("glUniform4fv"));
84                 glUniform4i = reinterpret_cast<PFNGLUNIFORM4IARBPROC>(get_proc_address("glUniform4i"));
85                 glUniform4iv = reinterpret_cast<PFNGLUNIFORM4IVARBPROC>(get_proc_address("glUniform4iv"));
86                 glUniformMatrix2fv = reinterpret_cast<PFNGLUNIFORMMATRIX2FVARBPROC>(get_proc_address("glUniformMatrix2fv"));
87                 glUniformMatrix3fv = reinterpret_cast<PFNGLUNIFORMMATRIX3FVARBPROC>(get_proc_address("glUniformMatrix3fv"));
88                 glUniformMatrix4fv = reinterpret_cast<PFNGLUNIFORMMATRIX4FVARBPROC>(get_proc_address("glUniformMatrix4fv"));
89                 glUseProgram = reinterpret_cast<PFNGLUSEPROGRAMOBJECTARBPROC>(get_proc_address("glUseProgram"));
90                 glValidateProgram = reinterpret_cast<PFNGLVALIDATEPROGRAMARBPROC>(get_proc_address("glValidateProgram"));
91                 return Extension::CORE;
92         }
93         if(is_supported("GL_ARB_shader_objects"))
94         {
95                 glAttachShader = reinterpret_cast<PFNGLATTACHOBJECTARBPROC>(get_proc_address("glAttachObjectARB"));
96                 glCompileShader = reinterpret_cast<PFNGLCOMPILESHADERARBPROC>(get_proc_address("glCompileShaderARB"));
97                 glCreateProgram = reinterpret_cast<PFNGLCREATEPROGRAMOBJECTARBPROC>(get_proc_address("glCreateProgramObjectARB"));
98                 glCreateShader = reinterpret_cast<PFNGLCREATESHADEROBJECTARBPROC>(get_proc_address("glCreateShaderObjectARB"));
99                 glDeleteProgram = reinterpret_cast<PFNGLDELETEOBJECTARBPROC>(get_proc_address("glDeleteObjectARB"));
100                 glDeleteShader = reinterpret_cast<PFNGLDELETEOBJECTARBPROC>(get_proc_address("glDeleteObjectARB"));
101                 glDetachShader = reinterpret_cast<PFNGLDETACHOBJECTARBPROC>(get_proc_address("glDetachObjectARB"));
102                 glGetActiveUniform = reinterpret_cast<PFNGLGETACTIVEUNIFORMARBPROC>(get_proc_address("glGetActiveUniformARB"));
103                 glGetAttachedShaders = reinterpret_cast<PFNGLGETATTACHEDOBJECTSARBPROC>(get_proc_address("glGetAttachedObjectsARB"));
104                 glGetProgramInfoLog = reinterpret_cast<PFNGLGETINFOLOGARBPROC>(get_proc_address("glGetInfoLogARB"));
105                 glGetProgramiv = reinterpret_cast<PFNGLGETOBJECTPARAMETERIVARBPROC>(get_proc_address("glGetObjectParameterivARB"));
106                 glGetShaderInfoLog = reinterpret_cast<PFNGLGETINFOLOGARBPROC>(get_proc_address("glGetInfoLogARB"));
107                 glGetShaderSource = reinterpret_cast<PFNGLGETSHADERSOURCEARBPROC>(get_proc_address("glGetShaderSourceARB"));
108                 glGetShaderiv = reinterpret_cast<PFNGLGETOBJECTPARAMETERIVARBPROC>(get_proc_address("glGetObjectParameterivARB"));
109                 glGetUniformLocation = reinterpret_cast<PFNGLGETUNIFORMLOCATIONARBPROC>(get_proc_address("glGetUniformLocationARB"));
110                 glGetUniformfv = reinterpret_cast<PFNGLGETUNIFORMFVARBPROC>(get_proc_address("glGetUniformfvARB"));
111                 glGetUniformiv = reinterpret_cast<PFNGLGETUNIFORMIVARBPROC>(get_proc_address("glGetUniformivARB"));
112                 glLinkProgram = reinterpret_cast<PFNGLLINKPROGRAMARBPROC>(get_proc_address("glLinkProgramARB"));
113                 glShaderSource = reinterpret_cast<PFNGLSHADERSOURCEARBPROC>(get_proc_address("glShaderSourceARB"));
114                 glUniform1f = reinterpret_cast<PFNGLUNIFORM1FARBPROC>(get_proc_address("glUniform1fARB"));
115                 glUniform1fv = reinterpret_cast<PFNGLUNIFORM1FVARBPROC>(get_proc_address("glUniform1fvARB"));
116                 glUniform1i = reinterpret_cast<PFNGLUNIFORM1IARBPROC>(get_proc_address("glUniform1iARB"));
117                 glUniform1iv = reinterpret_cast<PFNGLUNIFORM1IVARBPROC>(get_proc_address("glUniform1ivARB"));
118                 glUniform2f = reinterpret_cast<PFNGLUNIFORM2FARBPROC>(get_proc_address("glUniform2fARB"));
119                 glUniform2fv = reinterpret_cast<PFNGLUNIFORM2FVARBPROC>(get_proc_address("glUniform2fvARB"));
120                 glUniform2i = reinterpret_cast<PFNGLUNIFORM2IARBPROC>(get_proc_address("glUniform2iARB"));
121                 glUniform2iv = reinterpret_cast<PFNGLUNIFORM2IVARBPROC>(get_proc_address("glUniform2ivARB"));
122                 glUniform3f = reinterpret_cast<PFNGLUNIFORM3FARBPROC>(get_proc_address("glUniform3fARB"));
123                 glUniform3fv = reinterpret_cast<PFNGLUNIFORM3FVARBPROC>(get_proc_address("glUniform3fvARB"));
124                 glUniform3i = reinterpret_cast<PFNGLUNIFORM3IARBPROC>(get_proc_address("glUniform3iARB"));
125                 glUniform3iv = reinterpret_cast<PFNGLUNIFORM3IVARBPROC>(get_proc_address("glUniform3ivARB"));
126                 glUniform4f = reinterpret_cast<PFNGLUNIFORM4FARBPROC>(get_proc_address("glUniform4fARB"));
127                 glUniform4fv = reinterpret_cast<PFNGLUNIFORM4FVARBPROC>(get_proc_address("glUniform4fvARB"));
128                 glUniform4i = reinterpret_cast<PFNGLUNIFORM4IARBPROC>(get_proc_address("glUniform4iARB"));
129                 glUniform4iv = reinterpret_cast<PFNGLUNIFORM4IVARBPROC>(get_proc_address("glUniform4ivARB"));
130                 glUniformMatrix2fv = reinterpret_cast<PFNGLUNIFORMMATRIX2FVARBPROC>(get_proc_address("glUniformMatrix2fvARB"));
131                 glUniformMatrix3fv = reinterpret_cast<PFNGLUNIFORMMATRIX3FVARBPROC>(get_proc_address("glUniformMatrix3fvARB"));
132                 glUniformMatrix4fv = reinterpret_cast<PFNGLUNIFORMMATRIX4FVARBPROC>(get_proc_address("glUniformMatrix4fvARB"));
133                 glUseProgram = reinterpret_cast<PFNGLUSEPROGRAMOBJECTARBPROC>(get_proc_address("glUseProgramObjectARB"));
134                 glValidateProgram = reinterpret_cast<PFNGLVALIDATEPROGRAMARBPROC>(get_proc_address("glValidateProgramARB"));
135                 return Extension::EXTENSION;
136         }
137         return Extension::UNSUPPORTED;
138 }
139
140 Extension ARB_shader_objects("GL_ARB_shader_objects", init_arb_shader_objects);
141
142 } // namespace GL
143 } // namespace Msp