OpenSceneGraph 3.6.5
GLExtensions
Go to the documentation of this file.
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version. The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * OpenSceneGraph Public License for more details.
12*/
13
14#ifndef OSG_GLEXTENSIONS
15#define OSG_GLEXTENSIONS 1
16
17#include <osg/Export>
18#include <osg/GLDefines>
19
20#include <stdlib.h>
21#include <string.h>
22#include <string>
23#include <vector>
24#include <map>
25
26
27namespace osg {
28
29/** Return floating-point OpenGL/GLES version number.
30 * Note: Must only be called within a valid OpenGL context,
31 * undefined behavior may occur otherwise.
32*/
33extern OSG_EXPORT float getGLVersionNumber();
34
35/** Return true if "extension" is contained in "extensionString".
36*/
37extern OSG_EXPORT bool isExtensionInExtensionString(const char *extension, const char *extensionString);
38
39/** Return true if OpenGL/GLES "extension" is supported.
40 * Note: Must only be called within a valid OpenGL context,
41 * undefined behavior may occur otherwise.
42*/
43extern OSG_EXPORT bool isGLExtensionSupported(unsigned int contextID, const char *extension);
44
45/** Return true if either OpenGL/GLES "extension1" or "extension2" is supported.
46 * Note: Must only be called within a valid OpenGL context,
47 * undefined behavior may occur otherwise.
48*/
49extern OSG_EXPORT bool isGLExtensionSupported(unsigned int contextID, const char *extension1, const char *extension2);
50
51/** Return true if OpenGL/GLES "extension" or minimum OpenGL version number is supported.
52 * Note: Must only be called within a valid OpenGL context,
53 * undefined behavior may occur otherwise.
54*/
55extern OSG_EXPORT bool isGLExtensionOrVersionSupported(unsigned int contextID, const char *extension, float requiredGlVersion);
56
57/** Return the address of the specified OpenGL/GLES function.
58 * Return NULL if function not supported by OpenGL library.
59 * Note, glGLExtensionFuncPtr is declared inline so that the code
60 * is compiled locally to the calling code. This should get by Windows'
61 * dumb implementation of having different GL function ptr's for each
62 * library when linked to it.
63*/
64extern OSG_EXPORT void* getGLExtensionFuncPtr(const char *funcName);
65
66/** Set a list of extensions to disable for different OpenGL renderers. This allows
67 * OSG applications to work around OpenGL drivers' bugs which are due to problematic extension support.
68 * The format of the string is:
69 * "GLRendererString : ExtensionName, ExtensionName; GLRenderString2 : ExtensionName;"
70 * An example of is : "SUN_XVR1000:GL_EXT_texture_filter_anisotropic"
71 * The default setting of GLExtensionDisableString is obtained from the OSG_GL_EXTENSION_DISABLE
72 * environmental variable.
73*/
74extern OSG_EXPORT void setGLExtensionDisableString(const std::string& disableString);
75
76/** Get the list of extensions that are disabled for various OpenGL renderers. */
77extern OSG_EXPORT std::string& getGLExtensionDisableString();
78
79/** Return the address of the specified OpenGL function. If not found then
80 * check a second function name, if this fails then return NULL as function is
81 * not supported by OpenGL library. This is used for checking something
82 * like glActiveTexture (which is in OGL1.3) or glActiveTextureARB.
83*/
84inline void* getGLExtensionFuncPtr(const char *funcName, const char *fallbackFuncName)
85{
86 void* ptr = getGLExtensionFuncPtr(funcName);
87 return (ptr!=0) ? ptr : getGLExtensionFuncPtr(fallbackFuncName);
88}
89
90/** Return the address of the specified OpenGL function. If not found then
91 * check a second function name, if this fails then return NULL as function is
92 * not supported by OpenGL library. This is used for checking something
93 * like glActiveTexture (which is in OGL1.3) or glActiveTextureARB.
94*/
95inline void* getGLExtensionFuncPtr(const char *funcName1, const char *funcName2, const char *funcName3)
96{
97 void* ptr = getGLExtensionFuncPtr(funcName1);
98 return (ptr!=0) ? ptr : getGLExtensionFuncPtr(funcName2, funcName3);
99}
100
101template<typename T, typename R>
102bool convertPointer(T& dest, R src)
103{
104 memcpy(&dest, &src, sizeof(src));
105 return src!=0;
106}
107
108template<typename T, typename R>
109T convertPointerType(R src)
110{
111 T dest;
112 memcpy(&dest, &src, sizeof(src));
113 return dest;
114}
115
116template<typename T>
117bool setGLExtensionFuncPtr(T& t, const char* str1, bool validContext=true)
118{
119 return convertPointer(t, validContext ? osg::getGLExtensionFuncPtr(str1) : 0);
120}
121
122template<typename T>
123bool setGLExtensionFuncPtr(T& t, const char* str1, const char* str2, bool validContext=true)
124{
125 return convertPointer(t, validContext ? osg::getGLExtensionFuncPtr(str1, str2) : 0);
126}
127
128template<typename T>
129bool setGLExtensionFuncPtr(T& t, const char* str1, const char* str2, const char* str3, bool validContext=true)
130{
131 return convertPointer(t, validContext ? osg::getGLExtensionFuncPtr(str1, str2, str3) : 0);
132}
133
134class VertexAttribAlias
135{
136 public:
137 VertexAttribAlias():
138 _location(0) {}
139
140 VertexAttribAlias(const VertexAttribAlias& rhs):
141 _location(rhs._location),
142 _glName(rhs._glName),
143 _osgName(rhs._osgName),
144 _declaration(rhs._declaration) {}
145
146 VertexAttribAlias(GLuint location, const std::string glName, const std::string osgName, const std::string& declaration):
147 _location(location),
148 _glName(glName),
149 _osgName(osgName),
150 _declaration(declaration) {}
151
152 GLuint _location;
153 std::string _glName;
154 std::string _osgName;
155 std::string _declaration;
156};
157
158/** Main GLExtensions class for managing OpenGL extensions per graphics context.*/
159class OSG_EXPORT GLExtensions : public osg::Referenced
160{
161 public:
162 GLExtensions(unsigned int in_contextID);
163
164 /** Function to call to get the extension of a specified context.
165 * If the Exentsion object for that context has not yet been created then
166 * and the 'createIfNotInitalized' flag been set to false then returns NULL.
167 * If 'createIfNotInitalized' is true then the Extensions object is
168 * automatically created. However, in this case the extension object
169 * only be created with the graphics context associated with ContextID..*/
170 static GLExtensions* Get(unsigned int in_contextID,bool createIfNotInitalized);
171
172 /** allows users to override the extensions across graphics contexts.
173 * typically used when you have different extensions supported across graphics pipes
174 * but need to ensure that they all use the same low common denominator extensions.*/
175 static void Set(unsigned int in_contextID, GLExtensions* extensions);
176
177 // C++-friendly convenience wrapper methods
178 GLuint getCurrentProgram() const;
179 bool getProgramInfoLog( GLuint program, std::string& result ) const;
180 bool getShaderInfoLog( GLuint shader, std::string& result ) const;
181 bool getAttribLocation( const char* attribName, GLuint& slot ) const;
182 bool getFragDataLocation( const char* fragDataName, GLuint& slot) const;
183
184 unsigned int contextID;
185 float glVersion;
186 float glslLanguageVersion;
187
188 bool isGlslSupported;
189 bool isShaderObjectsSupported;
190 bool isVertexShaderSupported;
191 bool isFragmentShaderSupported;
192 bool isLanguage100Supported;
193 bool isGeometryShader4Supported;
194 bool areTessellationShadersSupported;
195 bool isGpuShader4Supported;
196 bool isUniformBufferObjectSupported;
197 bool isGetProgramBinarySupported;
198 bool isGpuShaderFp64Supported;
199 bool isShaderAtomicCountersSupported;
200 bool isRectangleSupported;
201 bool isCubeMapSupported;
202 bool isClipControlSupported;
203
204 void (GL_APIENTRY * glDrawBuffers)(GLsizei n, const GLenum *bufs);
205 void (GL_APIENTRY * glAttachShader)(GLuint program, GLuint shader);
206 void (GL_APIENTRY * glBindAttribLocation)(GLuint program, GLuint index, const GLchar *name);
207 void (GL_APIENTRY * glCompileShader)(GLuint shader);
208 GLuint (GL_APIENTRY * glCreateProgram)(void);
209 GLuint (GL_APIENTRY * glCreateShader)(GLenum type);
210 void (GL_APIENTRY * glDeleteProgram)(GLuint program);
211 void (GL_APIENTRY * glDeleteObjectARB)(GLuint program);
212 void (GL_APIENTRY * glDeleteShader)(GLuint shader);
213 void (GL_APIENTRY * glDetachShader)(GLuint program, GLuint shader);
214 void (GL_APIENTRY * glDisableVertexAttribArray)(GLuint index);
215 void (GL_APIENTRY * glEnableVertexAttribArray)(GLuint index);
216 void (GL_APIENTRY * glGetActiveAttrib)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
217 void (GL_APIENTRY * glGetActiveUniform)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
218 void (GL_APIENTRY * glGetAttachedShaders)(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj);
219 GLint (GL_APIENTRY * glGetAttribLocation)(GLuint program, const GLchar *name);
220 void (GL_APIENTRY * glGetProgramiv)(GLuint program, GLenum pname, GLint *params);
221 void (GL_APIENTRY * glGetObjectParameterivARB)(GLuint program, GLenum pname, GLint *params);
222 void (GL_APIENTRY * glGetProgramInfoLog)(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
223 void (GL_APIENTRY * glGetInfoLogARB)(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
224 void (GL_APIENTRY * glGetShaderiv)(GLuint shader, GLenum pname, GLint *params);
225 void (GL_APIENTRY * glGetShaderInfoLog)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
226 void (GL_APIENTRY * glGetShaderSource)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
227 GLint (GL_APIENTRY * glGetUniformLocation)(GLuint program, const GLchar *name);
228 void (GL_APIENTRY * glGetUniformfv)(GLuint program, GLint location, GLfloat *params);
229 void (GL_APIENTRY * glGetUniformiv)(GLuint program, GLint location, GLint *params);
230 void (GL_APIENTRY * glGetVertexAttribdv)(GLuint index, GLenum pname, GLdouble *params);
231 void (GL_APIENTRY * glGetVertexAttribfv)(GLuint index, GLenum pname, GLfloat *params);
232 void (GL_APIENTRY * glGetVertexAttribiv)(GLuint index, GLenum pname, GLint *params);
233 void (GL_APIENTRY * glGetVertexAttribPointerv)(GLuint index, GLenum pname, GLvoid* *pointer);
234 GLboolean (GL_APIENTRY * glIsProgram)(GLuint program);
235 GLboolean (GL_APIENTRY * glIsShader)(GLuint shader);
236 void (GL_APIENTRY * glLinkProgram)(GLuint program);
237 void (GL_APIENTRY * glShaderSource)(GLuint shader, GLsizei count, const GLchar* *string, const GLint *length);
238 void (GL_APIENTRY * glUseProgram)(GLuint program);
239 void (GL_APIENTRY * glUniform1f)(GLint location, GLfloat v0);
240 void (GL_APIENTRY * glUniform2f)(GLint location, GLfloat v0, GLfloat v1);
241 void (GL_APIENTRY * glUniform3f)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
242 void (GL_APIENTRY * glUniform4f)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
243 void (GL_APIENTRY * glUniform1i)(GLint location, GLint v0);
244 void (GL_APIENTRY * glUniform2i)(GLint location, GLint v0, GLint v1);
245 void (GL_APIENTRY * glUniform3i)(GLint location, GLint v0, GLint v1, GLint v2);
246 void (GL_APIENTRY * glUniform4i)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
247 void (GL_APIENTRY * glUniform1fv)(GLint location, GLsizei count, const GLfloat *value);
248 void (GL_APIENTRY * glUniform2fv)(GLint location, GLsizei count, const GLfloat *value);
249 void (GL_APIENTRY * glUniform3fv)(GLint location, GLsizei count, const GLfloat *value);
250 void (GL_APIENTRY * glUniform4fv)(GLint location, GLsizei count, const GLfloat *value);
251 void (GL_APIENTRY * glUniform1iv)(GLint location, GLsizei count, const GLint *value);
252 void (GL_APIENTRY * glUniform2iv)(GLint location, GLsizei count, const GLint *value);
253 void (GL_APIENTRY * glUniform3iv)(GLint location, GLsizei count, const GLint *value);
254 void (GL_APIENTRY * glUniform4iv)(GLint location, GLsizei count, const GLint *value);
255 void (GL_APIENTRY * glUniformMatrix2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
256 void (GL_APIENTRY * glUniformMatrix3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
257 void (GL_APIENTRY * glUniformMatrix4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
258 void (GL_APIENTRY * glValidateProgram)(GLuint program);
259 void (GL_APIENTRY * glVertexAttrib1d)(GLuint index, GLdouble x);
260 void (GL_APIENTRY * glVertexAttrib1dv)(GLuint index, const GLdouble *v);
261 void (GL_APIENTRY * glVertexAttrib1f)(GLuint index, GLfloat x);
262 void (GL_APIENTRY * glVertexAttrib1fv)(GLuint index, const GLfloat *v);
263 void (GL_APIENTRY * glVertexAttrib1s)(GLuint index, GLshort x);
264 void (GL_APIENTRY * glVertexAttrib1sv)(GLuint index, const GLshort *v);
265 void (GL_APIENTRY * glVertexAttrib2d)(GLuint index, GLdouble x, GLdouble y);
266 void (GL_APIENTRY * glVertexAttrib2dv)(GLuint index, const GLdouble *v);
267 void (GL_APIENTRY * glVertexAttrib2f)(GLuint index, GLfloat x, GLfloat y);
268 void (GL_APIENTRY * glVertexAttrib2fv)(GLuint index, const GLfloat *v);
269 void (GL_APIENTRY * glVertexAttrib2s)(GLuint index, GLshort x, GLshort y);
270 void (GL_APIENTRY * glVertexAttrib2sv)(GLuint index, const GLshort *v);
271 void (GL_APIENTRY * glVertexAttrib3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z);
272 void (GL_APIENTRY * glVertexAttrib3dv)(GLuint index, const GLdouble *v);
273 void (GL_APIENTRY * glVertexAttrib3f)(GLuint index, GLfloat x, GLfloat y, GLfloat z);
274 void (GL_APIENTRY * glVertexAttrib3fv)(GLuint index, const GLfloat *v);
275 void (GL_APIENTRY * glVertexAttrib3s)(GLuint index, GLshort x, GLshort y, GLshort z);
276 void (GL_APIENTRY * glVertexAttrib3sv)(GLuint index, const GLshort *v);
277 void (GL_APIENTRY * glVertexAttrib4Nbv)(GLuint index, const GLbyte *v);
278 void (GL_APIENTRY * glVertexAttrib4Niv)(GLuint index, const GLint *v);
279 void (GL_APIENTRY * glVertexAttrib4Nsv)(GLuint index, const GLshort *v);
280 void (GL_APIENTRY * glVertexAttrib4Nub)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
281 void (GL_APIENTRY * glVertexAttrib4Nubv)(GLuint index, const GLubyte *v);
282 void (GL_APIENTRY * glVertexAttrib4Nuiv)(GLuint index, const GLuint *v);
283 void (GL_APIENTRY * glVertexAttrib4Nusv)(GLuint index, const GLushort *v);
284 void (GL_APIENTRY * glVertexAttrib4bv)(GLuint index, const GLbyte *v);
285 void (GL_APIENTRY * glVertexAttrib4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
286 void (GL_APIENTRY * glVertexAttrib4dv)(GLuint index, const GLdouble *v);
287 void (GL_APIENTRY * glVertexAttrib4f)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
288 void (GL_APIENTRY * glVertexAttrib4fv)(GLuint index, const GLfloat *v);
289 void (GL_APIENTRY * glVertexAttrib4iv)(GLuint index, const GLint *v);
290 void (GL_APIENTRY * glVertexAttrib4s)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
291 void (GL_APIENTRY * glVertexAttrib4sv)(GLuint index, const GLshort *v);
292 void (GL_APIENTRY * glVertexAttrib4ubv)(GLuint index, const GLubyte *v);
293 void (GL_APIENTRY * glVertexAttrib4uiv)(GLuint index, const GLuint *v);
294 void (GL_APIENTRY * glVertexAttrib4usv)(GLuint index, const GLushort *v);
295 void (GL_APIENTRY * glVertexAttribPointer) (unsigned int, GLint, GLenum, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
296 void (GL_APIENTRY * glVertexAttribIPointer) (unsigned int, GLint, GLenum, GLsizei stride, const GLvoid *pointer);
297 void (GL_APIENTRY * glVertexAttribLPointer) (unsigned int, GLint, GLenum, GLsizei stride, const GLvoid *pointer);
298 void (GL_APIENTRY * glVertexAttribDivisor)(GLuint index, GLuint divisor);
299
300 void (GL_APIENTRY * glUniformMatrix2x3fv)( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value );
301 void (GL_APIENTRY * glUniformMatrix3x2fv)( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value );
302 void (GL_APIENTRY * glUniformMatrix2x4fv)( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value );
303 void (GL_APIENTRY * glUniformMatrix4x2fv)( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value );
304 void (GL_APIENTRY * glUniformMatrix3x4fv)( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value );
305 void (GL_APIENTRY * glUniformMatrix4x3fv)( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value );
306 void (GL_APIENTRY * glClipControl)( GLenum origin, GLenum depthMode );
307 void (GL_APIENTRY * glProgramParameteri)( GLuint program, GLenum pname, GLint value );
308 void (GL_APIENTRY * glPatchParameteri)( GLenum pname, GLint value );
309 void (GL_APIENTRY * glPatchParameterfv)( GLenum pname, const GLfloat* values );
310 void (GL_APIENTRY * glGetUniformuiv)( GLuint program, GLint location, GLuint* params );
311 void (GL_APIENTRY * glBindFragDataLocation)( GLuint program, GLuint color, const GLchar* name );
312 void (GL_APIENTRY * glBindFragDataLocationIndexed) (GLuint program, GLuint colorNumber, GLuint index, const GLchar * name);
313 GLint (GL_APIENTRY * glGetFragDataIndex) (GLuint program, const GLchar * name);
314 GLint (GL_APIENTRY * glGetFragDataLocation)( GLuint program, const GLchar* name);
315 void (GL_APIENTRY * glUniform1ui)( GLint location, GLuint v0 );
316 void (GL_APIENTRY * glUniform2ui)( GLint location, GLuint v0, GLuint v1 );
317 void (GL_APIENTRY * glUniform3ui)( GLint location, GLuint v0, GLuint v1, GLuint v2 );
318 void (GL_APIENTRY * glUniform4ui)( GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3 );
319 void (GL_APIENTRY * glUniform1uiv)( GLint location, GLsizei count, const GLuint *value );
320 void (GL_APIENTRY * glUniform2uiv)( GLint location, GLsizei count, const GLuint *value );
321 void (GL_APIENTRY * glUniform3uiv)( GLint location, GLsizei count, const GLuint *value );
322 void (GL_APIENTRY * glUniform4uiv)( GLint location, GLsizei count, const GLuint *value );
323 void (GL_APIENTRY * glUniform1i64 )(GLint location, GLint64 x) ;
324 void (GL_APIENTRY * glUniform1i64v )(GLint location, GLsizei count, const GLint64* value) ;
325 void (GL_APIENTRY * glUniform1ui64 )(GLint location, GLuint64 x) ;
326 void (GL_APIENTRY * glUniform1ui64v)(GLint location, GLsizei count, const GLuint64* value) ;
327 void (GL_APIENTRY * glUniform2i64 )(GLint location, GLint64 x, GLint64 y) ;
328 void (GL_APIENTRY * glUniform2i64v )(GLint location, GLsizei count, const GLint64* value) ;
329 void (GL_APIENTRY * glUniform2ui64 )(GLint location, GLuint64 x, GLuint64 y) ;
330 void (GL_APIENTRY * glUniform2ui64v)(GLint location, GLsizei count, const GLuint64* value) ;
331 void (GL_APIENTRY * glUniform3i64 )(GLint location, GLint64 x, GLint64 y, GLint64 z) ;
332 void (GL_APIENTRY * glUniform3i64v )(GLint location, GLsizei count, const GLint64* value) ;
333 void (GL_APIENTRY * glUniform3ui64 )(GLint location, GLuint64 x, GLuint64 y, GLuint64 z) ;
334 void (GL_APIENTRY * glUniform3ui64v)(GLint location, GLsizei count, const GLuint64* value) ;
335 void (GL_APIENTRY * glUniform4i64 )(GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w) ;
336 void (GL_APIENTRY * glUniform4i64v )(GLint location, GLsizei count, const GLint64* value) ;
337 void (GL_APIENTRY * glUniform4ui64 )(GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w) ;
338 void (GL_APIENTRY * glUniform4ui64v)(GLint location, GLsizei count, const GLuint64* value) ;
339 GLuint (GL_APIENTRY * glGetHandleARB) (GLenum pname);
340 void (GL_APIENTRY * glGetUniformIndices)(GLuint program, GLsizei uniformCount, const GLchar* *uniformNames, GLuint *uniformIndices);
341 void (GL_APIENTRY * glGetActiveUniformsiv)(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
342 void (GL_APIENTRY * glGetActiveUniformName)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
343 GLuint (GL_APIENTRY * glGetUniformBlockIndex)(GLuint program, const GLchar *uniformBlockName);
344 void (GL_APIENTRY * glGetActiveUniformBlockiv)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
345 void (GL_APIENTRY * glGetActiveUniformBlockName)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
346 void (GL_APIENTRY * glUniformBlockBinding)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
347 void (GL_APIENTRY * glGetProgramBinary)(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);
348 void (GL_APIENTRY * glProgramBinary)(GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length);
349 void (GL_APIENTRY * glUniform1d)(GLint location, GLdouble v0);
350 void (GL_APIENTRY * glUniform2d)(GLint location, GLdouble v0, GLdouble v1);
351 void (GL_APIENTRY * glUniform3d)(GLint location, GLdouble v0, GLdouble v1, GLdouble v2);
352 void (GL_APIENTRY * glUniform4d)(GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
353 void (GL_APIENTRY * glUniform1dv)(GLint location, GLsizei count, const GLdouble *value);
354 void (GL_APIENTRY * glUniform2dv)(GLint location, GLsizei count, const GLdouble *value);
355 void (GL_APIENTRY * glUniform3dv)(GLint location, GLsizei count, const GLdouble *value);
356 void (GL_APIENTRY * glUniform4dv)(GLint location, GLsizei count, const GLdouble *value);
357 void (GL_APIENTRY * glUniformMatrix2dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
358 void (GL_APIENTRY * glUniformMatrix3dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
359 void (GL_APIENTRY * glUniformMatrix4dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
360 void (GL_APIENTRY * glUniformMatrix2x3dv)( GLint location, GLsizei count, GLboolean transpose, const GLdouble* value );
361 void (GL_APIENTRY * glUniformMatrix3x2dv)( GLint location, GLsizei count, GLboolean transpose, const GLdouble* value );
362 void (GL_APIENTRY * glUniformMatrix2x4dv)( GLint location, GLsizei count, GLboolean transpose, const GLdouble* value );
363 void (GL_APIENTRY * glUniformMatrix4x2dv)( GLint location, GLsizei count, GLboolean transpose, const GLdouble* value );
364 void (GL_APIENTRY * glUniformMatrix3x4dv)( GLint location, GLsizei count, GLboolean transpose, const GLdouble* value );
365 void (GL_APIENTRY * glUniformMatrix4x3dv)( GLint location, GLsizei count, GLboolean transpose, const GLdouble* value );
366 void (GL_APIENTRY * glGetActiveAtomicCounterBufferiv)( GLuint program, GLuint bufferIndex, GLenum pname, GLint* params );
367 void (GL_APIENTRY * glDispatchCompute)( GLuint numGroupsX, GLuint numGroupsY, GLuint numGroupsZ );
368
369 // ARB_bindless_texture
370 GLuint64 (GL_APIENTRY* glGetTextureHandle)(GLuint texture);
371 GLuint64 (GL_APIENTRY* glGetTextureSamplerHandle)(GLuint texture, GLuint sampler);
372 void (GL_APIENTRY* glMakeTextureHandleResident)(GLuint64 handle);
373 void (GL_APIENTRY* glMakeTextureHandleNonResident)(GLuint64 handle);
374 GLboolean (GL_APIENTRY* glIsTextureHandleResident)(GLuint64 handle);
375 GLuint64 (GL_APIENTRY* glGetImageHandle)(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
376 void (GL_APIENTRY* glMakeImageHandleResident)(GLuint64 handle);
377 void (GL_APIENTRY* glMakeImageHandleNonResident)(GLuint64 handle);
378 GLboolean (GL_APIENTRY* glIsImageHandleResident)(GLuint64 handle);
379 void (GL_APIENTRY* glUniformHandleui64)(GLint location, GLuint64 handle);
380 void (GL_APIENTRY* glUniformHandleuiv64)(GLint location, GLsizei count, GLuint64 *handles);
381 void (GL_APIENTRY* glProgramUniformHandleui64)(GLuint program, GLint location, GLuint64 handle);
382 void (GL_APIENTRY* glProgramUniformHandleuiv64)(GLuint program, GLint location, GLsizei count, GLuint64 *handles);
383
384 // Buffer Object extensions
385 bool isBufferObjectSupported;
386 bool isVBOSupported;
387 bool isPBOSupported;
388 bool isTBOSupported;
389 bool isVAOSupported;
390 bool isTransformFeedbackSupported;
391
392 void (GL_APIENTRY * glGenBuffers) (GLsizei n, GLuint *buffers);
393 void (GL_APIENTRY * glBindBuffer) (GLenum target, GLuint buffer);
394 void (GL_APIENTRY * glBufferData) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
395 void (GL_APIENTRY * glBufferSubData) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);
396 void (GL_APIENTRY * glDeleteBuffers) (GLsizei n, const GLuint *buffers);
397 GLboolean (GL_APIENTRY * glIsBuffer) (GLuint buffer);
398 void (GL_APIENTRY * glGetBufferSubData) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);
399 GLvoid* (GL_APIENTRY * glBufferStorage) (GLenum target, GLintptr size, const GLvoid * data, GLbitfield flags);
400 GLvoid* (GL_APIENTRY * glNamedBufferStorage) (GLuint buffer, GLsizei size, const void * data, GLbitfield flags);
401 GLvoid* (GL_APIENTRY * glMapBuffer) (GLenum target, GLenum access);
402 GLvoid* (GL_APIENTRY * glMapBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
403 GLboolean (GL_APIENTRY * glUnmapBuffer) (GLenum target);
404 void (GL_APIENTRY * glGetBufferParameteriv) (GLenum target, GLenum pname, GLint *params);
405 void (GL_APIENTRY * glGetBufferPointerv) (GLenum target, GLenum pname, GLvoid* *params);
406 void (GL_APIENTRY * glBindBufferRange) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
407 void (GL_APIENTRY * glBindBufferBase) (GLenum target, GLuint index, GLuint buffer);
408 void (GL_APIENTRY * glTexBuffer) (GLenum target, GLenum internalFormat, GLuint buffer);
409
410 void (GL_APIENTRY * glMemoryBarrier)( GLbitfield barriers );
411
412 // BlendFunc extensions
413 bool isBlendFuncSeparateSupported;
414 void (GL_APIENTRY * glBlendFuncSeparate) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) ;
415
416 void (GL_APIENTRY * glBlendFunci) (GLuint buf, GLenum src, GLenum dst);
417 void (GL_APIENTRY * glBlendFuncSeparatei) (GLuint buf, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) ;
418
419
420 // Vertex Array extensions
421 bool isSecondaryColorSupported;
422 bool isFogCoordSupported;
423 bool isMultiTexSupported;
424 bool isOcclusionQuerySupported;
425 bool isARBOcclusionQuerySupported;
426 bool isTimerQuerySupported;
427 bool isARBTimerQuerySupported;
428
429
430
431 void (GL_APIENTRY * glDrawArraysInstanced)( GLenum mode, GLint first, GLsizei count, GLsizei primcount );
432 void (GL_APIENTRY * glDrawElementsInstanced)( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount );
433
434 void (GL_APIENTRY * glSecondaryColor3ubv) (const GLubyte* coord);
435 void (GL_APIENTRY * glSecondaryColor3fv) (const GLfloat* coord);
436
437 void (GL_APIENTRY * glFogCoordfv) (const GLfloat* coord);
438
439 void (GL_APIENTRY * glMultiTexCoord1f) (GLenum target,GLfloat coord);
440 void (GL_APIENTRY * glMultiTexCoord4f) (GLenum target, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
441
442 void (GL_APIENTRY * glMultiTexCoord1fv) (GLenum target,const GLfloat* coord);
443 void (GL_APIENTRY * glMultiTexCoord2fv) (GLenum target,const GLfloat* coord);
444 void (GL_APIENTRY * glMultiTexCoord3fv) (GLenum target,const GLfloat* coord);
445 void (GL_APIENTRY * glMultiTexCoord4fv) (GLenum target,const GLfloat* coord);
446
447 void (GL_APIENTRY * glMultiTexCoord1d) (GLenum target,GLdouble coord);
448 void (GL_APIENTRY * glMultiTexCoord1dv) (GLenum target,const GLdouble* coord);
449 void (GL_APIENTRY * glMultiTexCoord2dv) (GLenum target,const GLdouble* coord);
450 void (GL_APIENTRY * glMultiTexCoord3dv) (GLenum target,const GLdouble* coord);
451 void (GL_APIENTRY * glMultiTexCoord4dv) (GLenum target,const GLdouble* coord);
452
453 // Occlusion Query extensions
454 void (GL_APIENTRY * glGenOcclusionQueries) ( GLsizei n, GLuint *ids );
455 void (GL_APIENTRY * glDeleteOcclusionQueries) ( GLsizei n, const GLuint *ids );
456 GLboolean (GL_APIENTRY * glIsOcclusionQuery) ( GLuint id );
457 void (GL_APIENTRY * glBeginOcclusionQuery) ( GLuint id );
458 void (GL_APIENTRY * glEndOcclusionQuery) ();
459 void (GL_APIENTRY * glGetOcclusionQueryiv) ( GLuint id, GLenum pname, GLint *params );
460 void (GL_APIENTRY * glGetOcclusionQueryuiv) ( GLuint id, GLenum pname, GLuint *params );
461
462 void (GL_APIENTRY * glGetQueryiv) (GLenum target, GLenum pname, GLint *params);
463 void (GL_APIENTRY * glGenQueries) (GLsizei n, GLuint *ids);
464 void (GL_APIENTRY * glBeginQuery) (GLenum target, GLuint id);
465 void (GL_APIENTRY * glEndQuery) (GLenum target);
466 void (GL_APIENTRY * glBeginQueryIndexed) (GLenum target, GLuint index, GLuint id);
467 void (GL_APIENTRY * glEndQueryIndexed) (GLenum target, GLuint index);
468 void (GL_APIENTRY * glQueryCounter) (GLuint id, GLenum target);
469 GLboolean (GL_APIENTRY * glIsQuery) (GLuint id);
470 void (GL_APIENTRY * glDeleteQueries) (GLsizei n, const GLuint *ids);
471 void (GL_APIENTRY * glGetQueryObjectiv) (GLuint id, GLenum pname, GLint *params);
472 void (GL_APIENTRY * glGetQueryObjectuiv) (GLuint id, GLenum pname, GLuint *params);
473 void (GL_APIENTRY * glGetQueryObjectui64v) (GLuint id, GLenum pname, GLuint64 *params);
474 void (GL_APIENTRY * glGetInteger64v) (GLenum pname, GLint64 *params);
475
476
477 // SampleMaski functionality
478 bool isOpenGL32upported;
479 bool isTextureMultisampleSupported;
480 bool isSampleMaskiSupported;
481
482 void (GL_APIENTRY * glSampleMaski) (GLuint maskNumber, GLbitfield mask);
483
484 // Vertex/Fragment Programs
485 bool isVertexProgramSupported;
486 bool isFragmentProgramSupported;
487
488 void (GL_APIENTRY * glBindProgram) (GLenum target, GLuint id);
489 void (GL_APIENTRY * glGenPrograms) (GLsizei n, GLuint *programs);
490 void (GL_APIENTRY * glDeletePrograms) (GLsizei n, GLuint *programs);
491 void (GL_APIENTRY * glProgramString) (GLenum target, GLenum format, GLsizei len, const void *string);
492 void (GL_APIENTRY * glProgramLocalParameter4fv) (GLenum target, GLuint index, const GLfloat *params);
493
494 // Sample Extensions (OpenGL>=3.3)
495 void (GL_APIENTRY * glSamplerParameteri)(GLuint sampler, GLenum param, GLint value);
496 void (GL_APIENTRY * glSamplerParameterf)(GLuint sampler, GLenum param, GLfloat value);
497 void (GL_APIENTRY * glSamplerParameteriv)(GLuint sampler, GLenum param, GLint *value);
498 void (GL_APIENTRY * glSamplerParameterfv)(GLuint sampler, GLenum param, GLfloat *value);
499 void (GL_APIENTRY * glSamplerParameterIiv)(GLuint sampler, GLenum param, GLint *value);
500 void (GL_APIENTRY * glSamplerParameterIuiv)(GLuint sampler, GLenum param, GLuint *value);
501
502 void (GL_APIENTRY * glGetSamplerParameteriv)(GLuint sampler, GLenum param, GLint *value);
503 void (GL_APIENTRY * glGetSamplerParameterfv)(GLuint sampler, GLenum param, GLfloat *value);
504 void (GL_APIENTRY * glGetSamplerParameterIiv)(GLuint sampler, GLenum param, GLint *value);
505 void (GL_APIENTRY * glGetSamplerParameterIuiv)(GLuint sampler, GLenum param, GLuint *value);
506
507 void (GL_APIENTRY * glGenSamplers)(GLsizei size,GLuint * samplers);
508 void (GL_APIENTRY * glDeleteSamplers)(GLsizei size,const GLuint * samplers);
509 void (GL_APIENTRY * glBindSampler)(GLuint tu, GLuint sampler);
510 GLboolean (GL_APIENTRY * glIsSampler)(GLuint id);
511
512 // Texture Extensions
513 bool isMultiTexturingSupported;
514 bool isTextureFilterAnisotropicSupported;
515 bool isTextureSwizzleSupported;
516 bool isTextureCompressionARBSupported;
517 bool isTextureCompressionS3TCSupported;
518 bool isTextureCompressionPVRTC2BPPSupported;
519 bool isTextureCompressionPVRTC4BPPSupported;
520 bool isTextureCompressionETCSupported;
521 bool isTextureCompressionETC2Supported;
522 bool isTextureCompressionRGTCSupported;
523 bool isTextureCompressionPVRTCSupported;
524 bool isTextureMirroredRepeatSupported;
525 bool isTextureEdgeClampSupported;
526 bool isTextureBorderClampSupported;
527 bool isGenerateMipMapSupported;
528 bool preferGenerateMipmapSGISForPowerOfTwo;
529 bool isTextureMultisampledSupported;
530 bool isShadowSupported;
531 bool isShadowAmbientSupported;
532 bool isTextureMaxLevelSupported;
533 GLint maxTextureSize;
534 bool isClientStorageSupported;
535 bool isTextureIntegerEXTSupported;
536 bool isTextureStorageEnabled;
537
538 bool isTexStorage2DSupported() const { return glTexStorage2D != 0; }
539 bool isCompressedTexImage2DSupported() const { return glCompressedTexImage2D!=0; }
540 bool isCompressedTexSubImage2DSupported() const { return glCompressedTexSubImage2D!=0; }
541 bool isBindImageTextureSupported() const { return glBindImageTexture!=0; }
542 bool isNonPowerOfTwoTextureMipMappedSupported;
543 bool isNonPowerOfTwoTextureNonMipMappedSupported;
544 bool isNonPowerOfTwoTextureSupported(GLenum filter) const
545 {
546 return (filter==GL_LINEAR || filter==GL_NEAREST) ?
547 isNonPowerOfTwoTextureNonMipMappedSupported :
548 isNonPowerOfTwoTextureMipMappedSupported;
549 }
550
551 ///immutable texture storage and texture view
552 void (GL_APIENTRY * glTexStorage1D) (GLenum target, GLsizei numMipmapLevels, GLenum internalformat, GLsizei width);
553 void (GL_APIENTRY * glTextureStorage1D) (GLuint texture, GLsizei numMipmapLevels, GLenum internalformat, GLsizei width);
554 void (GL_APIENTRY * glTexStorage2D) (GLenum target, GLsizei numMipmapLevels, GLenum internalformat, GLsizei width, GLsizei height);
555 void (GL_APIENTRY * glTextureStorage2D) (GLuint texture, GLsizei numMipmapLevels, GLenum internalformat, GLsizei width, GLsizei height);
556 void (GL_APIENTRY * glTexStorage3D) ( GLenum target, GLsizei numMipmapLevels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
557 void (GL_APIENTRY * glTextureStorage3D) ( GLuint texture, GLsizei numMipmapLevels,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth);
558 void (GL_APIENTRY * glTexStorage2DMultisample) ( GLenum target, GLsizei numSamples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
559 void (GL_APIENTRY * glTexStorage3DMultisample) ( GLenum target, GLsizei numSamples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
560 void (GL_APIENTRY * glTextureView) ( GLuint texture, GLenum target, GLuint orig, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
561
562 void (GL_APIENTRY * glCompressedTexImage2D) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
563 void (GL_APIENTRY * glCompressedTexSubImage2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
564 void (GL_APIENTRY * glGetCompressedTexImage) (GLenum target, GLint level, GLvoid *data);
565 void (GL_APIENTRY * glTexImage2DMultisample) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
566 void (GL_APIENTRY * glTexParameterIiv) (GLenum target, GLenum pname, const GLint* data);
567 void (GL_APIENTRY * glTexParameterIuiv) (GLenum target, GLenum pname, const GLuint* data);
568 void (GL_APIENTRY * glBindImageTexture) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
569
570
571 // Texture3D extensions
572 bool isTexture3DSupported;
573 bool isTexture3DFast;
574 GLint maxTexture3DSize;
575 bool isCompressedTexImage3DSupported() const { return glCompressedTexImage3D!=0; }
576 bool isCompressedTexSubImage3DSupported() const { return glCompressedTexSubImage3D!=0; }
577
578 void (GL_APIENTRY * glTexImage3D) ( GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
579 void (GL_APIENTRY * glTexSubImage3D) ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
580
581 void (GL_APIENTRY * glCopyTexSubImage3D) ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height );
582 void (GL_APIENTRY * glCompressedTexImage3D) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
583 void (GL_APIENTRY * glCompressedTexSubImage3D) ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data );
584 void (GL_APIENTRY *glTexImage3DMultisample) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
585 void (GL_APIENTRY *glGetMultisamplefv) (GLenum pname, GLuint index, GLfloat *val);
586
587 // Texture2DArray extensions
588 bool isTexture2DArraySupported;
589 GLint maxLayerCount;
590 GLint max2DSize;
591
592
593 // Blending
594 bool isBlendColorSupported;
595 bool isBlendEquationSupported;
596 bool isBlendEquationSeparateSupported;
597 bool isSGIXMinMaxSupported;
598 bool isLogicOpSupported;
599
600 void (GL_APIENTRY * glBlendColor) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
601 void (GL_APIENTRY * glBlendEquation)(GLenum mode);
602 void (GL_APIENTRY * glBlendEquationSeparate)(GLenum modeRGB, GLenum modeAlpha);
603 void (GL_APIENTRY * glBlendEquationi)(GLuint buf, GLenum mode);
604 void (GL_APIENTRY * glBlendEquationSeparatei)(GLuint buf, GLenum modeRGB, GLenum modeAlpha);
605
606
607 // glEnablei/glDisabeli
608 void (GL_APIENTRY * glEnablei) (GLenum capability, GLuint buf);
609 void (GL_APIENTRY * glDisablei) (GLenum capability, GLuint buf);
610
611
612 // Stencil
613 bool isStencilWrapSupported;
614 bool isStencilTwoSidedSupported;
615 bool isOpenGL20Supported;
616 bool isSeparateStencilSupported;
617
618 void (GL_APIENTRY * glActiveStencilFace) (GLenum face);
619 void (GL_APIENTRY * glStencilOpSeparate) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
620 void (GL_APIENTRY * glStencilMaskSeparate) (GLenum face, GLuint mask);
621 void (GL_APIENTRY * glStencilFuncSeparate) (GLenum face, GLenum func, GLint ref, GLuint mask);
622 void (GL_APIENTRY * glStencilFuncSeparateATI) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
623
624
625 // ColorMask
626 void (GL_APIENTRY * glColorMaski)(GLuint buf, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
627
628
629 // ClampColor
630 bool isClampColorSupported;
631 void (GL_APIENTRY * glClampColor) (GLenum target, GLenum mode);
632
633
634 // PrimitiveRestartIndex
635 void (GL_APIENTRY * glPrimitiveRestartIndex) ( GLuint index );
636
637
638 // Mutlisample
639 bool isMultisampleSupported;
640 bool isMultisampleFilterHintSupported;
641
642 void (GL_APIENTRY * glSampleCoverage) (GLfloat value, GLboolean invert);
643
644
645 // Point
646 bool isPointParametersSupported;
647 bool isPointSpriteSupported;
648 bool isPointSpriteModeSupported;
649 bool isPointSpriteCoordOriginSupported;
650
651 void (GL_APIENTRY * glPointParameteri) (GLenum pname, GLint param);
652 void (GL_APIENTRY * glPointParameterf) (GLenum pname, GLfloat param);
653 void (GL_APIENTRY * glPointParameterfv) (GLenum pname, const GLfloat *params);
654
655
656 // FrameBuferObject
657 bool isFrameBufferObjectSupported;
658 bool isPackedDepthStencilSupported;
659 bool isMultisampledRenderToTextureSupported;
660 bool isInvalidateFramebufferSupported;
661
662 bool isRenderbufferMultisampleSupported() const { return glRenderbufferStorageMultisample != 0; }
663 bool isRenderbufferMultisampleCoverageSupported() const { return glRenderbufferStorageMultisampleCoverageNV != 0; }
664
665 void (GL_APIENTRY * glBindRenderbuffer) (GLenum, GLuint);
666 void (GL_APIENTRY * glDeleteRenderbuffers) (GLsizei n, const GLuint *renderbuffers);
667 void (GL_APIENTRY * glGenRenderbuffers) (GLsizei, GLuint *);
668 void (GL_APIENTRY * glRenderbufferStorage) (GLenum, GLenum, GLsizei, GLsizei);
669 void (GL_APIENTRY * glRenderbufferStorageMultisample) (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
670 void (GL_APIENTRY * glRenderbufferStorageMultisampleCoverageNV) (GLenum, GLsizei, GLsizei, GLenum, GLsizei, GLsizei);
671 void (GL_APIENTRY * glBindFramebuffer) (GLenum, GLuint);
672 void (GL_APIENTRY * glDeleteFramebuffers) (GLsizei n, const GLuint *framebuffers);
673 void (GL_APIENTRY * glGenFramebuffers) (GLsizei, GLuint *);
674 GLenum (GL_APIENTRY * glCheckFramebufferStatus) (GLenum);
675
676 void (GL_APIENTRY * glFramebufferTexture1D) (GLenum, GLenum, GLenum, GLuint, GLint);
677 void (GL_APIENTRY * glFramebufferTexture2D) (GLenum, GLenum, GLenum, GLuint, GLint);
678 void (GL_APIENTRY * glFramebufferTexture2DMultisample) (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei);
679 void (GL_APIENTRY * glFramebufferTexture3D) (GLenum, GLenum, GLenum, GLuint, GLint, GLint);
680 void (GL_APIENTRY * glFramebufferTexture) (GLenum, GLenum, GLint, GLint);
681 void (GL_APIENTRY * glFramebufferTextureLayer) (GLenum, GLenum, GLuint, GLint, GLint);
682 void (GL_APIENTRY * glFramebufferTextureFace)( GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face );
683 void (GL_APIENTRY * glFramebufferRenderbuffer) (GLenum, GLenum, GLenum, GLuint);
684
685 void (GL_APIENTRY * glGenerateMipmap) (GLenum);
686 void (GL_APIENTRY * glBlitFramebuffer) (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum);
687 void (GL_APIENTRY * glInvalidateFramebuffer) (GLenum, GLsizei, const GLenum*); // GL_ARB_invalidate_subdata or GL 4.3 or GLES 3
688 void (GL_APIENTRY * glGetRenderbufferParameteriv) (GLenum, GLenum, GLint*);
689
690 //ARB_framebuffer_no_attachments
691 void (GL_APIENTRY * glFramebufferParameteri)(GLenum target, GLenum pname, GLint param);
692 void (GL_APIENTRY * glGetFramebufferParameteriv)(GLenum target, GLenum pname, GLint *params);
693 void (GL_APIENTRY * glNamedFramebufferParameteri)(GLuint fbo, GLenum pname, GLint param);
694 void (GL_APIENTRY * glGetNamedFramebufferParameteriv)(GLuint fbo, GLenum pname, GLint *params);
695
696 //subroutine
697 GLint(GL_APIENTRY* glGetSubroutineUniformLocation) (GLuint program, GLenum shadertype, const GLchar *name);
698 void (GL_APIENTRY * glGetActiveSubroutineUniformName) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
699 void (GL_APIENTRY * glGetActiveSubroutineUniformiv) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
700 GLuint (GL_APIENTRY * glGetSubroutineIndex) (GLuint program, GLenum shadertype, const GLchar *name);
701 void (GL_APIENTRY * glGetActiveSubroutineName) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
702 void (GL_APIENTRY * glGetProgramStageiv) (GLuint program, GLenum shadertype, GLenum pname, GLint *values);
703 void (GL_APIENTRY *glUniformSubroutinesuiv) (GLenum shadertype, GLsizei count,const GLuint * indices);
704 void (GL_APIENTRY * glGetUniformSubroutineuiv) (GLenum shadertype, GLint location, GLuint *params);
705
706 // Sync
707 GLsync (GL_APIENTRY * glFenceSync) (GLenum condition, GLbitfield flags);
708 GLboolean (GL_APIENTRY * glIsSync) (GLsync sync);
709 void (GL_APIENTRY * glDeleteSync) (GLsync sync);
710 GLenum (GL_APIENTRY * glClientWaitSync) (GLsync sync, GLbitfield flags, GLuint64 timeout);
711 void (GL_APIENTRY * glWaitSync) (GLsync sync, GLbitfield flags, GLuint64 timeout);
712 void (GL_APIENTRY * glGetSynciv) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
713
714 // Indirect Rendering
715 void (GL_APIENTRY * glDrawArraysIndirect) (GLenum mode, const void * indirect);
716 void (GL_APIENTRY * glMultiDrawArraysIndirect) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
717 void (GL_APIENTRY * glDrawElementsIndirect) (GLenum mode, GLenum type, const void *indirect);
718 void (GL_APIENTRY * glMultiDrawElementsIndirect)(GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
719
720 // ARB_sparse_texture
721 void (GL_APIENTRY * glTexPageCommitment) (GLenum target, GLint level,GLint xoffset,GLint yoffset,GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,GLboolean commit);
722
723 // Transform feedback
724 void (GL_APIENTRY * glBeginTransformFeedback) (GLenum primitiveMode);
725 void (GL_APIENTRY * glEndTransformFeedback) (void);
726 void (GL_APIENTRY * glTransformFeedbackVaryings) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
727 void (GL_APIENTRY * glGetTransformFeedbackVarying) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
728 void (GL_APIENTRY * glBindTransformFeedback) (GLenum target, GLuint id);
729 void (GL_APIENTRY * glDeleteTransformFeedbacks) (GLsizei n, const GLuint *ids);
730 void (GL_APIENTRY * glGenTransformFeedbacks) (GLsizei n, GLuint *ids);
731 GLboolean (GL_APIENTRY * glIsTransformFeedback) (GLuint id);
732 void (GL_APIENTRY * glPauseTransformFeedback) (void);
733 void (GL_APIENTRY * glResumeTransformFeedback) (void);
734 void (GL_APIENTRY * glDrawTransformFeedback) (GLenum mode, GLuint id);
735 void (GL_APIENTRY * glDrawTransformFeedbackStream) (GLenum mode, GLuint id, GLuint stream);
736 void (GL_APIENTRY * glDrawTransformFeedbackInstanced) (GLenum mode, GLuint id, GLsizei instancecount);
737 void (GL_APIENTRY * glDrawTransformFeedbackStreamInstanced) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);
738 void (GL_APIENTRY * glCreateTransformFeedbacks) (GLsizei n, GLuint *ids);
739 void (GL_APIENTRY * glTransformFeedbackBufferBase) (GLuint xfb, GLuint index, GLuint buffer);
740 void (GL_APIENTRY * glTransformFeedbackBufferRange) (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size);
741 void (GL_APIENTRY * glGetTransformFeedbackiv) (GLuint xfb, GLenum pname, GLint *param);
742 void (GL_APIENTRY * glGetTransformFeedbacki_v) (GLuint xfb, GLenum pname, GLuint index, GLint *param);
743 void (GL_APIENTRY * glGetTransformFeedbacki64_v) (GLuint xfb, GLenum pname, GLuint index, GLint64 *param);
744
745 // Vertex Array Object
746 void (GL_APIENTRY * glDeleteVertexArrays) (GLsizei size,const GLuint *handles);
747 void (GL_APIENTRY * glGenVertexArrays) (GLsizei size, GLuint *handles);
748 GLboolean (GL_APIENTRY * glIsVertexArray) (GLuint handle);
749 void (GL_APIENTRY * glBindVertexArray) (GLuint handle);
750
751 // OpenGL 4.3 / ARB_vertex_attrib_binding
752 bool isVertexAttribBindingSupported;
753 void (GL_APIENTRY * glBindVertexBuffer)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLintptr stride);
754 void (GL_APIENTRY * glVertexArrayVertexBuffer)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
755 void (GL_APIENTRY * glVertexAttribBinding)(GLuint attribindex, GLuint bindingindex);
756 void (GL_APIENTRY * glVertexArrayAttribBinding)(GLuint vaobj, GLuint attribindex, GLuint bindingindex);
757
758 void (GL_APIENTRY * glVertexAttribFormat)( GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
759 void (GL_APIENTRY * glVertexAttribIFormat)( GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
760 void (GL_APIENTRY * glVertexAttribLFormat)( GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
761 void (GL_APIENTRY * glVertexArrayAttribFormat)( GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
762 void (GL_APIENTRY * glVertexArrayAttribIFormat)( GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
763 void (GL_APIENTRY * glVertexArrayAttribLFormat)( GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
764
765 // MultiDrawArrays
766 void (GL_APIENTRY * glMultiDrawArrays) (GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount);
767 void (GL_APIENTRY * glMultiDrawElements) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount);
768 void (GL_APIENTRY * glMultiDrawElementsBaseVertex) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex);
769
770
771 void (GL_APIENTRY * glDrawRangeElements) ( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices );
772 void (GL_APIENTRY * glDrawElementsBaseVertex) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
773 void (GL_APIENTRY * glDrawElementsInstancedBaseVertex) (GLenum mode, GLsizei count, GLenum type, const void *indices,GLsizei primcount, GLint basevertex);
774
775 void (GL_APIENTRY * glDrawRangeElementsBaseVertex) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
776 void (GL_APIENTRY * glProvokingVertex) (GLenum mode);
777
778 void (GL_APIENTRY * glBeginConditionalRender) (GLuint id, GLenum mode);
779 void (GL_APIENTRY * glEndConditionalRender) (void);
780
781
782 void (GL_APIENTRY *glDrawArraysInstancedBaseInstance) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);
783 void (GL_APIENTRY * glDrawElementsInstancedBaseInstance) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
784 void (GL_APIENTRY *glDrawElementsInstancedBaseVertexBaseInstance) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
785
786
787 // ViewportArray
788 bool isViewportArraySupported;
789
790 void (GL_APIENTRY * glViewportArrayv) (GLuint first, GLsizei count, const GLfloat * v);
791 void (GL_APIENTRY * glViewportIndexedf) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
792 void (GL_APIENTRY * glViewportIndexedfv) (GLuint index, const GLfloat * v);
793 void (GL_APIENTRY * glScissorArrayv) (GLuint first, GLsizei count, const GLint * v);
794 void (GL_APIENTRY * glScissorIndexed) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
795 void (GL_APIENTRY * glScissorIndexedv) (GLuint index, const GLint * v);
796 void (GL_APIENTRY * glDepthRangeArrayv) (GLuint first, GLsizei count, const GLdouble * v);
797 void (GL_APIENTRY * glDepthRangeIndexed) (GLuint index, GLdouble n, GLdouble f);
798 void (GL_APIENTRY * glDepthRangeIndexedf) (GLuint index, GLfloat n, GLfloat f);
799 void (GL_APIENTRY * glGetFloati_v) (GLenum target, GLuint index, GLfloat *data);
800 void (GL_APIENTRY * glGetDoublei_v) (GLenum target, GLuint index, GLdouble *data);
801
802 //introduced by other OpenGL extensions such as EXT_draw_buffers2
803 void (GL_APIENTRY * glGetIntegerIndexedvEXT) (GLenum target, GLuint index, int * v);
804 void (GL_APIENTRY * glEnableIndexedEXT) (GLenum target, GLuint index);
805 void (GL_APIENTRY * glDisableIndexedEXT) (GLenum target, GLuint index);
806 GLboolean (GL_APIENTRY * glIsEnabledIndexedEXT) (GLenum target, GLuint index);
807
808 void (GL_APIENTRY * glClientActiveTexture) (GLenum texture);
809 void (GL_APIENTRY * glActiveTexture) (GLenum texture);
810 void (GL_APIENTRY * glFogCoordPointer) (GLenum type, GLsizei stride, const GLvoid *pointer);
811 void (GL_APIENTRY * glSecondaryColorPointer) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
812
813 GLint glMaxTextureCoords;
814 GLint glMaxTextureUnits;
815
816 // debug extensions
817 void (GL_APIENTRY * glObjectLabel) (GLenum identifier, GLuint name, GLsizei length, const GLchar* label);
818
819 /** convenience wrapper around glObjectLabel that calls glObjectLabel if it's supported and using std::string as a label parameter.*/
820 void debugObjectLabel(GLenum identifier, GLuint name, const std::string& label) const { if (glObjectLabel && !label.empty()) glObjectLabel(identifier, name, label.size(), label.c_str()); }
821
822 protected:
823 virtual ~GLExtensions();
824};
825
826
827}
828
829#endif

osg logo
Generated at Thu Jan 16 2025 00:00:00 for the OpenSceneGraph by doxygen 1.13.2.