1 /*
2  * Copyright (C) Volition, Inc. 1999.  All rights reserved.
3  *
4  * All source code herein is the property of Volition, Inc. You may not sell
5  * or otherwise commercially exploit the source or things you created based on the
6  * source.
7  *
8 */
9 
10 
11 
12 #ifndef _GROPENGLEXT_H
13 #define _GROPENGLEXT_H
14 
15 #include "globalincs/pstypes.h"
16 #include "graphics/gropengl.h"
17 
18 //EXTENSIONS!!!!
19 //be sure to check for this at startup and handle not finding it gracefully
20 
21 //to add extensions/functions:
22 //define an index after the last one, either an extension or a function
23 //increment NUM_OGL_EXTENSIONS if an extension or NUM_OGL_FUNCTIONS if function
24 //add function macro for Win32
25 //add function info to GL_Functions struct
26 //the structure of extensions/functions are located in gropenglextension.cpp
27 
28 typedef struct ogl_extension {
29 	bool required_to_run;
30 	bool enabled;
31 	int num_extensions;
32 	const char *extension_name[3];
33 	int num_functions;
34 	const char *function_names[20];
35 } ogl_extension;
36 
37 typedef struct ogl_function {
38 	const char *function_name;
39 	ptr_u function_ptr;
40 } ogl_function;
41 
42 extern ogl_function GL_Functions[];
43 extern ogl_extension GL_Extensions[];
44 extern ogl_function GL_EXT_Special[];
45 
46 
47 // Extensions
48 #define OGL_EXT_FOG_COORD					0
49 #define OGL_ARB_MULTITEXTURE				1
50 #define OGL_ARB_TEXTURE_ENV_ADD			2
51 #define OGL_ARB_TEXTURE_COMPRESSION		3
52 #define OGL_EXT_TEXTURE_COMPRESSION_S3TC	4
53 #define OGL_EXT_TEXTURE_FILTER_ANISOTROPIC	5
54 //#define OGL_NV_FOG_DISTANCE				6
55 //#define OGL_EXT_SECONDARY_COLOR			7
56 #define OGL_ARB_TEXTURE_ENV_COMBINE		6
57 #define OGL_EXT_COMPILED_VERTEX_ARRAY		7
58 //#define OGL_ARB_TRANSPOSE_MATRIX		10
59 #define OGL_EXT_DRAW_RANGE_ELEMENTS		8
60 #define OGL_ARB_TEXTURE_MIRRORED_REPEAT	9
61 #define OGL_ARB_TEXTURE_NON_POWER_OF_TWO	10
62 #define OGL_ARB_VERTEX_BUFFER_OBJECT		11
63 #define OGL_ARB_PIXEL_BUFFER_OBJECT		12
64 #define OGL_SGIS_GENERATE_MIPMAP			13
65 #define OGL_EXT_FRAMEBUFFER_OBJECT			14
66 #define OGL_ARB_TEXTURE_RECTANGLE			15
67 #define OGL_EXT_BGRA						16
68 #define OGL_ARB_TEXTURE_CUBE_MAP			17
69 #define OGL_EXT_TEXTURE_LOD_BIAS			18
70 #define OGL_ARB_POINT_SPRITE				19
71 #define OGL_ARB_SHADING_LANGUAGE_100		20
72 #define OGL_ARB_SHADER_OBJECTS				21
73 #define OGL_ARB_VERTEX_SHADER				22
74 #define OGL_ARB_FRAGMENT_SHADER				23
75 #define OGL_SM30							24
76 #define OGL_ARB_FLOATING_POINT_TEXTURES		25
77 #define OGL_ARB_DRAW_ELEMENTS_BASE_VERTEX	26
78 
79 #define NUM_OGL_EXTENSIONS					27
80 
81 
82 // Functions
83 #define OGL_FOG_COORDF						0			// for better looking fog
84 #define OGL_FOG_COORD_POINTER				1			// used with vertex arrays
85 #define OGL_MULTI_TEX_COORD_2F				2			// multitex coordinates
86 #define OGL_ACTIVE_TEXTURE					3			// currenly active multitexture
87 #define OGL_CLIENT_ACTIVE_TEXTURE			4
88 #define OGL_COMPRESSED_TEX_IMAGE_2D			5			// 2d compressed texture
89 #define OGL_COMPRESSED_TEX_SUB_IMAGE_2D		6			// 2d compressed sub texture
90 #define OGL_GET_COMPRESSED_TEX_IMAGE		7
91 //#define OGL_SECONDARY_COLOR_3FV			8			// for better looking fog
92 //#define OGL_SECONDARY_COLOR_3UBV			9			// specular
93 #define OGL_LOCK_ARRAYS						8			// HTL
94 #define OGL_UNLOCK_ARRAYS					9			// HTL
95 //#define OGL_LOAD_TRANSPOSE_MATRIX_F		12
96 //#define OGL_MULT_TRANSPOSE_MATRIX_F		13
97 #define OGL_DRAW_RANGE_ELEMENTS				10
98 #define OGL_BIND_BUFFER						11
99 #define OGL_DELETE_BUFFERS					12
100 #define OGL_GEN_BUFFERS						13
101 #define OGL_BUFFER_DATA						14
102 #define OGL_BUFFER_SUB_DATA					15
103 #define OGL_MAP_BUFFER						16
104 #define OGL_UNMAP_BUFFER					17
105 #define OGL_IS_RENDERBUFFER					18
106 #define OGL_BIND_RENDERBUFFER				19
107 #define OGL_DELETE_RENDERBUFFERS			20
108 #define OGL_GEN_RENDERBUFFERS				21
109 #define OGL_RENDERBUFFER_STORAGE			22
110 #define OGL_GET_RENDERBUFFER_PARAMETER_IV	23
111 #define OGL_IS_FRAMEBUFFER					24
112 #define OGL_BIND_FRAMEBUFFER				25
113 #define OGL_DELETE_FRAMEBUFFERS				26
114 #define OGL_GEN_FRAMEBUFFERS				27
115 #define OGL_CHECK_FRAMEBUFFER_STATUS		28
116 #define OGL_FRAMEBUFFER_TEXTURE_2D			29
117 #define OGL_FRAMEBUFFER_RENDERBUFFER		30
118 #define OGL_GET_FRAMEBUFFER_ATTACHMENT_PARAMETER_IV		31
119 #define OGL_GENERATE_MIPMAP					32
120 #define OGL_DELETE_OBJECT					33
121 #define OGL_CREATE_SHADER_OBJECT			34
122 #define OGL_SHADER_SOURCE					35
123 #define OGL_COMPILE_SHADER					36
124 #define OGL_GET_OBJECT_PARAMETERIV			37
125 #define OGL_GET_INFO_LOG					38
126 #define OGL_CREATE_PROGRAM_OBJECT			39
127 #define OGL_ATTACH_OBJECT					40
128 #define OGL_LINK_PROGRAM					41
129 #define OGL_USE_PROGRAM_OBJECT				42
130 #define OGL_VALIDATE_PROGRAM				43
131 #define OGL_ENABLE_VERTEX_ATTRIB_ARRAY		44
132 #define OGL_DISABLE_VERTEX_ATTRIB_ARRAY		45
133 #define OGL_GET_ATTRIB_LOCATION				46
134 #define OGL_VERTEX_ATTRIB_POINTER			47
135 #define OGL_GET_UNIFORM_LOCATION			48
136 #define OGL_GET_UNIFORMIV					49
137 #define OGL_UNIFORM1F						50
138 #define OGL_UNIFORM2F						51
139 #define OGL_UNIFORM3F						52
140 #define OGL_UNIFORM4F						53
141 #define OGL_UNIFORM3FV						54
142 #define OGL_UNIFORM4FV						55
143 #define OGL_UNIFORM1I						56
144 #define OGL_UNIFORM_MATRIX4FV				57
145 #define OGL_DRAWBUFFERS						58
146 #define OGL_DRAW_ELEMENTS_BASE_VERTEX				59
147 #define OGL_DRAW_RANGE_ELEMENTS_BASE_VERTEX			60
148 #define OGL_DRAW_ELEMENTS_INSTANCED_BASE_VERTEX		61
149 #define OGL_MULTI_DRAW_ELEMENTS_BASE_VERTEX			62
150 
151 #define NUM_OGL_FUNCTIONS					63
152 
153 
154 // special extensions/functions (OS specific, non-GL stuff)
155 #define OGL_SPC_WGL_SWAP_INTERVAL		0
156 #define OGL_SPC_GLX_SWAP_INTERVAL		1
157 
158 #define NUM_OGL_EXT_SPECIAL				2
159 
160 
161 #define Is_Extension_Enabled(x)		GL_Extensions[x].enabled
162 
163 void opengl_extensions_init();
164 
165 
166 #define GLEXT_CALL(i, x) if (GL_Functions[i].function_ptr) \
167 							((x)GL_Functions[i].function_ptr)
168 
169 // the same as GLEXT_CALL() except that it can be used with a cast or in an if statement
170 // this doesn't do NULL ptr checking so you have to be careful with it!
171 #define GLEXT_CALL2(i, x) ((x)GL_Functions[i].function_ptr)
172 
173 #define GLEXT_SPC_CALL(i, x) if (GL_EXT_Special[i].function_ptr) \
174 							((x)GL_EXT_Special[i].function_ptr)
175 
176 
177 #ifdef __APPLE__
178 // special one, since it's a core feature
179 typedef void (* glDrawRangeElementsProcPtr) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
180 
181 // OS X doesn't have the PFN* names so we have to use the real OSX function ptrs
182 #define PFNGLFOGCOORDFEXTPROC					glFogCoordfEXTProcPtr
183 #define PFNGLFOGCOORDPOINTEREXTPROC				glFogCoordPointerEXTProcPtr
184 #define PFNGLMULTITEXCOORD2FARBPROC				glMultiTexCoord2fARBProcPtr
185 #define PFNGLACTIVETEXTUREARBPROC				glActiveTextureARBProcPtr
186 #define PFNGLCLIENTACTIVETEXTUREARBPROC			glClientActiveTextureARBProcPtr
187 #define PFNGLCOMPRESSEDTEXIMAGE2DPROC			glCompressedTexImage2DARBProcPtr
188 #define PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC		glCompressedTexSubImage2DARBProcPtr
189 #define PFNGLGETCOMPRESSEDTEXIMAGEARBPROC		glGetCompressedTexImageARBProcPtr
190 //#define PFNGLSECONDARYCOLOR3FVEXTPROC			glSecondaryColor3fvEXTProcPtr
191 //#define PFNGLSECONDARYCOLOR3UBVEXTPROC		glSecondaryColor3ubvEXTProcPtr
192 #define PFNGLLOCKARRAYSEXTPROC					glLockArraysEXTProcPtr
193 #define PFNGLUNLOCKARRAYSEXTPROC				glUnlockArraysEXTProcPtr
194 //#define PFNGLLOADTRANSPOSEMATRIXFARBPROC		glLoadTransposeMatrixfARBProcPtr
195 //#define PFNGLMULTTRANSPOSEMATRIXFARBPROC		glMultTransposeMatrixfARBProcPtr
196 #define PFNGLDRAWRANGEELEMENTSPROC				glDrawRangeElementsProcPtr
197 #define PFNGLBINDBUFFERARBPROC					glBindBufferARBProcPtr
198 #define PFNGLDELETEBUFFERSARBPROC				glDeleteBuffersARBProcPtr
199 #define PFNGLGENBUFFERSARBPROC					glGenBuffersARBProcPtr
200 #define PFNGLBUFFERDATAARBPROC					glBufferDataARBProcPtr
201 #define PFNGLBUFFERSUBDATAARBPROC				glBufferSubDataARBProcPtr
202 #define PFNGLMAPBUFFERARBPROC					glMapBufferARBProcPtr
203 #define PFNGLUNMAPBUFFERARBPROC					glUnmapBufferARBProcPtr
204 #define PFNGLISRENDERBUFFEREXTPROC				glIsRenderbufferEXTProcPtr
205 #define PFNGLBINDRENDERBUFFEREXTPROC			glBindRenderbufferEXTProcPtr
206 #define PFNGLDELETERENDERBUFFERSEXTPROC			glDeleteRenderbuffersEXTProcPtr
207 #define PFNGLGENRENDERBUFFERSEXTPROC			glGenRenderbuffersEXTProcPtr
208 #define PFNGLRENDERBUFFERSTORAGEEXTPROC			glRenderbufferStorageEXTProcPtr
209 #define PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC	glGetRenderbufferParameterivEXTProcPtr
210 #define PFNGLISFRAMEBUFFEREXTPROC				glIsFramebufferEXTProcPtr
211 #define PFNGLBINDFRAMEBUFFEREXTPROC				glBindFramebufferEXTProcPtr
212 #define PFNGLDELETEFRAMEBUFFERSEXTPROC			glDeleteFramebuffersEXTProcPtr
213 #define PFNGLGENFRAMEBUFFERSEXTPROC				glGenFramebuffersEXTProcPtr
214 #define PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC		glCheckFramebufferStatusEXTProcPtr
215 #define PFNGLFRAMEBUFFERTEXTURE2DEXTPROC		glFramebufferTexture2DEXTProcPtr
216 #define PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC		glFramebufferRenderbufferEXTProcPtr
217 #define PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC	glGetFramebufferAttachmentParameterivEXTProcPtr
218 #define PFNGLGENERATEMIPMAPEXTPROC				glGenerateMipmapEXTProcPtr
219 #define PFNGLDELETEOBJECTARBPROC				glDeleteObjectARBProcPtr
220 #define PFNGLCREATESHADEROBJECTARBPROC			glCreateShaderObjectARBProcPtr
221 #define PFNGLSHADERSOURCEARBPROC				glShaderSourceARBProcPtr
222 #define PFNGLCOMPILESHADERARBPROC				glCompileShaderARBProcPtr
223 #define PFNGLGETOBJECTPARAMETERIVARBPROC		glGetObjectParameterivARBProcPtr
224 #define PFNGLGETINFOLOGARBPROC					glGetInfoLogARBProcPtr
225 #define PFNGLCREATEPROGRAMOBJECTARBPROC			glCreateProgramObjectARBProcPtr
226 #define PFNGLATTACHOBJECTARBPROC				glAttachObjectARBProcPtr
227 #define PFNGLLINKPROGRAMARBPROC					glLinkProgramARBProcPtr
228 #define PFNGLUSEPROGRAMOBJECTARBPROC			glUseProgramObjectARBProcPtr
229 #define PFNGLVALIDATEPROGRAMARBPROC				glValidateProgramARBProcPtr
230 #define PFNGLENABLEVERTEXATTRIBARRAYARBPROC		glEnableVertexAttribArrayARBProcPtr
231 #define PFNGLDISABLEVERTEXATTRIBARRAYARBPROC	glDisableVertexAttribArrayARBProcPtr
232 #define PFNGLGETATTRIBLOCATIONARBPROC			glGetAttribLocationARBProcPtr
233 #define PFNGLVERTEXATTRIBPOINTERARBPROC			glVertexAttribPointerARBProcPtr
234 #define PFNGLGETUNIFORMLOCATIONARBPROC			glGetUniformLocationARBProcPtr
235 #define PFNGLGETUNIFORMIVARBPROC				glGetUniformivARBProcPtr
236 #define PFNGLUNIFORM1FARBPROC					glUniform1fARBProcPtr
237 #define PFNGLUNIFORM2FARBPROC					glUniform2fARBProcPtr
238 #define PFNGLUNIFORM3FARBPROC					glUniform3fARBProcPtr
239 #define PFNGLUNIFORM4FARBPROC					glUnifrom4fARBProcPtr
240 #define PFNGLUNIFORM3FVARBPROC					glUniform3fvARBProcPtr
241 #define PFNGLUNIFORM4FVARBPROC					glUnifrom4fvARBProcPtr
242 #define PFNGLUNIFORM1IARBPROC					glUniform1iARBProcPtr
243 #define PFNGLUNIFORMMATRIX4FVARBPROC			glUniformMatrix4fvARBProcPtr
244 #define PFNGLDRAWBUFFERSPROC					glDrawBuffersARBProcPtr
245 #define PFNGLDRAWELEMENTSBASEVERTEXPROC         glDrawElementsBaseVertexProcPtr
246 #define PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC    glDrawRangeElementsBaseVertexProcPtr
247 #define PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertexProcPtr
248 #define PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC    glMultiDrawElementsBaseVertexProcPtr
249 #endif	// __APPLE__
250 
251 #define vglFogCoordfEXT					GLEXT_CALL( OGL_FOG_COORDF, PFNGLFOGCOORDFEXTPROC )
252 #define vglFogCoordPointerEXT			GLEXT_CALL( OGL_FOG_COORD_POINTER, PFNGLFOGCOORDPOINTEREXTPROC )
253 #define vglMultiTexCoord2fARB			GLEXT_CALL( OGL_MULTI_TEX_COORD_2F, PFNGLMULTITEXCOORD2FARBPROC )
254 #define vglActiveTextureARB				GLEXT_CALL( OGL_ACTIVE_TEXTURE, PFNGLACTIVETEXTUREARBPROC )
255 #define vglClientActiveTextureARB		GLEXT_CALL( OGL_CLIENT_ACTIVE_TEXTURE, PFNGLCLIENTACTIVETEXTUREARBPROC )
256 #define vglCompressedTexImage2D			GLEXT_CALL( OGL_COMPRESSED_TEX_IMAGE_2D, PFNGLCOMPRESSEDTEXIMAGE2DPROC )
257 #define vglCompressedTexSubImage2D		GLEXT_CALL( OGL_COMPRESSED_TEX_SUB_IMAGE_2D, PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC )
258 #define vglGetCompressedTexImageARB		GLEXT_CALL( OGL_GET_COMPRESSED_TEX_IMAGE, PFNGLGETCOMPRESSEDTEXIMAGEARBPROC )
259 //#define vglSecondaryColor3fvEXT		GLEXT_CALL( OGL_SECONDARY_COLOR_3FV, PFNGLSECONDARYCOLOR3FVEXTPROC )
260 //#define vglSecondaryColor3ubvEXT		GLEXT_CALL( OGL_SECONDARY_COLOR_3UBV, PFNGLSECONDARYCOLOR3UBVEXTPROC )
261 #define vglLockArraysEXT				GLEXT_CALL( OGL_LOCK_ARRAYS, PFNGLLOCKARRAYSEXTPROC )
262 #define vglUnlockArraysEXT				GLEXT_CALL( OGL_UNLOCK_ARRAYS, PFNGLUNLOCKARRAYSEXTPROC )
263 //#define vglLoadTransposeMatrixfARB	GLEXT_CALL( OGL_LOAD_TRANSPOSE_MATRIX_F, PFNGLLOADTRANSPOSEMATRIXFARBPROC )
264 //#define vglMultTransposeMatrixfARB	GLEXT_CALL( OGL_MULT_TRANSPOSE_MATRIX_F, PFNGLMULTTRANSPOSEMATRIXFARBPROC )
265 #define vglDrawRangeElements			GLEXT_CALL( OGL_DRAW_RANGE_ELEMENTS, PFNGLDRAWRANGEELEMENTSPROC )
266 #define vglBindBufferARB				GLEXT_CALL( OGL_BIND_BUFFER, PFNGLBINDBUFFERARBPROC )
267 #define vglDeleteBuffersARB				GLEXT_CALL( OGL_DELETE_BUFFERS, PFNGLDELETEBUFFERSARBPROC )
268 #define vglGenBuffersARB				GLEXT_CALL( OGL_GEN_BUFFERS, PFNGLGENBUFFERSARBPROC )
269 #define vglBufferDataARB				GLEXT_CALL( OGL_BUFFER_DATA, PFNGLBUFFERDATAARBPROC )
270 #define vglBufferSubDataARB				GLEXT_CALL( OGL_BUFFER_SUB_DATA, PFNGLBUFFERSUBDATAARBPROC )
271 #define vglMapBufferARB					GLEXT_CALL2( OGL_MAP_BUFFER, PFNGLMAPBUFFERARBPROC )
272 #define vglUnmapBufferARB				GLEXT_CALL( OGL_UNMAP_BUFFER, PFNGLUNMAPBUFFERARBPROC )
273 #define vglIsRenderbufferEXT			GLEXT_CALL2( OGL_IS_RENDERBUFFER, PFNGLISRENDERBUFFEREXTPROC )
274 #define vglBindRenderbufferEXT			GLEXT_CALL( OGL_BIND_RENDERBUFFER, PFNGLBINDRENDERBUFFEREXTPROC )
275 #define vglDeleteRenderbuffersEXT		GLEXT_CALL( OGL_DELETE_RENDERBUFFERS, PFNGLDELETERENDERBUFFERSEXTPROC )
276 #define vglGenRenderbuffersEXT			GLEXT_CALL( OGL_GEN_RENDERBUFFERS, PFNGLGENRENDERBUFFERSEXTPROC )
277 #define vglRenderbufferStorageEXT		GLEXT_CALL( OGL_RENDERBUFFER_STORAGE, PFNGLRENDERBUFFERSTORAGEEXTPROC )
278 #define vglGetRenderbufferParameterivEXT	GLEXT_CALL( OGL_GET_RENDERBUFFER_PARAMETER_IV, PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC )
279 #define vglIsFramebufferEXT				GLEXT_CALL2( OGL_IS_FRAMEBUFFER, PFNGLISFRAMEBUFFEREXTPROC )
280 #define vglBindFramebufferEXT			GLEXT_CALL( OGL_BIND_FRAMEBUFFER, PFNGLBINDFRAMEBUFFEREXTPROC )
281 #define vglDeleteFramebuffersEXT		GLEXT_CALL( OGL_DELETE_FRAMEBUFFERS, PFNGLDELETEFRAMEBUFFERSEXTPROC )
282 #define vglGenFramebuffersEXT			GLEXT_CALL( OGL_GEN_FRAMEBUFFERS, PFNGLGENFRAMEBUFFERSEXTPROC )
283 #define vglCheckFramebufferStatusEXT	GLEXT_CALL2( OGL_CHECK_FRAMEBUFFER_STATUS, PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC )
284 #define vglFramebufferTexture2DEXT		GLEXT_CALL( OGL_FRAMEBUFFER_TEXTURE_2D, PFNGLFRAMEBUFFERTEXTURE2DEXTPROC )
285 #define vglFramebufferRenderbufferEXT	GLEXT_CALL( OGL_FRAMEBUFFER_RENDERBUFFER, PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC )
286 #define vglGetFramebufferAttachmentParameterivEXT	GLEXT_CALL( OGL_GET_FRAMEBUFFER_ATTACHMENT_PARAMETER_IV, PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC )
287 #define vglGenerateMipmapEXT			GLEXT_CALL( OGL_GENERATE_MIPMAP, PFNGLGENERATEMIPMAPEXTPROC )
288 #define vglDeleteObjectARB				GLEXT_CALL( OGL_DELETE_OBJECT, PFNGLDELETEOBJECTARBPROC )
289 #define vglCreateShaderObjectARB		GLEXT_CALL2( OGL_CREATE_SHADER_OBJECT, PFNGLCREATESHADEROBJECTARBPROC )
290 #define vglShaderSourceARB				GLEXT_CALL( OGL_SHADER_SOURCE, PFNGLSHADERSOURCEARBPROC )
291 #define vglCompileShaderARB				GLEXT_CALL( OGL_COMPILE_SHADER, PFNGLCOMPILESHADERARBPROC )
292 #define vglGetObjectParameterivARB		GLEXT_CALL( OGL_GET_OBJECT_PARAMETERIV, PFNGLGETOBJECTPARAMETERIVARBPROC )
293 #define vglGetInfoLogARB				GLEXT_CALL( OGL_GET_INFO_LOG, PFNGLGETINFOLOGARBPROC )
294 #define vglCreateProgramObjectARB		GLEXT_CALL2( OGL_CREATE_PROGRAM_OBJECT, PFNGLCREATEPROGRAMOBJECTARBPROC )
295 #define vglAttachObjectARB				GLEXT_CALL( OGL_ATTACH_OBJECT, PFNGLATTACHOBJECTARBPROC )
296 #define vglLinkProgramARB				GLEXT_CALL( OGL_LINK_PROGRAM, PFNGLLINKPROGRAMARBPROC )
297 #define vglUseProgramObjectARB			GLEXT_CALL( OGL_USE_PROGRAM_OBJECT, PFNGLUSEPROGRAMOBJECTARBPROC )
298 #define vglValidateProgramARB			GLEXT_CALL( OGL_VALIDATE_PROGRAM, PFNGLVALIDATEPROGRAMARBPROC )
299 #define vglEnableVertexAttribArrayARB	GLEXT_CALL( OGL_ENABLE_VERTEX_ATTRIB_ARRAY, PFNGLENABLEVERTEXATTRIBARRAYARBPROC )
300 #define vglDisableVertexAttribArrayARB	GLEXT_CALL( OGL_DISABLE_VERTEX_ATTRIB_ARRAY, PFNGLDISABLEVERTEXATTRIBARRAYARBPROC )
301 #define vglGetAttribLocationARB			GLEXT_CALL2( OGL_GET_ATTRIB_LOCATION, PFNGLGETATTRIBLOCATIONARBPROC )
302 #define vglVertexAttribPointerARB		GLEXT_CALL( OGL_VERTEX_ATTRIB_POINTER, PFNGLVERTEXATTRIBPOINTERARBPROC )
303 #define vglGetUniformLocationARB		GLEXT_CALL2( OGL_GET_UNIFORM_LOCATION, PFNGLGETUNIFORMLOCATIONARBPROC )
304 #define vglGetUniformivARB				GLEXT_CALL( OGL_GET_UNIFORMIV, PFNGLGETUNIFORMIVARBPROC )
305 #define vglUniform1fARB					GLEXT_CALL( OGL_UNIFORM1F, PFNGLUNIFORM1FARBPROC )
306 #define vglUniform2fARB					GLEXT_CALL( OGL_UNIFORM2F, PFNGLUNIFORM2FARBPROC )
307 #define vglUniform3fARB					GLEXT_CALL( OGL_UNIFORM3F, PFNGLUNIFORM3FARBPROC )
308 #define vglUniform4fARB					GLEXT_CALL( OGL_UNIFORM4F, PFNGLUNIFORM4FARBPROC )
309 #define vglUniform3fvARB				GLEXT_CALL( OGL_UNIFORM3FV, PFNGLUNIFORM3FVARBPROC )
310 #define vglUniform4fvARB				GLEXT_CALL( OGL_UNIFORM4FV, PFNGLUNIFORM4FVARBPROC )
311 #define vglUniform1iARB					GLEXT_CALL( OGL_UNIFORM1I, PFNGLUNIFORM1IARBPROC )
312 #define vglUniformMatrix4fvARB			GLEXT_CALL( OGL_UNIFORM_MATRIX4FV, PFNGLUNIFORMMATRIX4FVARBPROC )
313 #define vglDrawBuffers					GLEXT_CALL( OGL_DRAWBUFFERS, PFNGLDRAWBUFFERSPROC )
314 #define vglDrawElementsBaseVertex		GLEXT_CALL( OGL_DRAW_ELEMENTS_BASE_VERTEX, PFNGLDRAWELEMENTSBASEVERTEXPROC )
315 #define vglDrawRangeElementsBaseVertex	GLEXT_CALL( OGL_DRAW_RANGE_ELEMENTS_BASE_VERTEX, PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC )
316 #define vglDrawElementsInstancedBaseVertex		GLEXT_CALL( OGL_DRAW_ELEMENTS_INSTANCED_BASE_VERTEX, PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC )
317 #define vglMultiDrawElementsBaseVertex	GLEXT_CALL( OGL_MULTI_DRAW_ELEMENTS_BASE_VERTEX, PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC )
318 
319 // special extensions
320 #define vwglSwapIntervalEXT			GLEXT_SPC_CALL( OGL_SPC_WGL_SWAP_INTERVAL, PFNWGLSWAPINTERVALEXTPROC )
321 #define vglXSwapIntervalSGI			GLEXT_SPC_CALL( OGL_SPC_GLX_SWAP_INTERVAL, PFNGLXSWAPINTERVALSGIPROC )
322 
323 #endif // _GROPENGLEXT_H
324