[ioquake3] 10/59: OpenGL2: Use loader for all extension funcs.

Simon McVittie smcv at debian.org
Wed Sep 21 19:56:58 UTC 2016


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to branch debian/master
in repository ioquake3.

commit 716438168f160885fe1d8cc2e076e97901bd436c
Author: SmileTheory <SmileTheory at gmail.com>
Date:   Tue Jul 26 00:41:31 2016 -0700

    OpenGL2: Use loader for all extension funcs.
---
 code/renderercommon/qgl.h        | 202 +++++++++++--------------------------
 code/renderergl2/tr_backend.c    |   2 +-
 code/renderergl2/tr_bsp.c        |   2 +-
 code/renderergl2/tr_extensions.c | 208 ++++++++++++++++-----------------------
 code/renderergl2/tr_image.c      |   7 +-
 code/renderergl2/tr_init.c       |   2 +-
 code/renderergl2/tr_local.h      |   1 -
 code/renderergl2/tr_shade.c      |   8 +-
 code/renderergl2/tr_vbo.c        |  14 +--
 9 files changed, 158 insertions(+), 288 deletions(-)

diff --git a/code/renderercommon/qgl.h b/code/renderercommon/qgl.h
index 6f27e13..6f70f64 100644
--- a/code/renderercommon/qgl.h
+++ b/code/renderercommon/qgl.h
@@ -438,14 +438,6 @@ extern void (APIENTRYP qglUnlockArraysEXT) (void);
 	GLE(void, ValidateProgram, GLuint program) \
 	GLE(void, VertexAttribPointer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer) \
 
-#define GLE(ret, name, ...) typedef ret APIENTRY name##proc(__VA_ARGS__); extern name##proc * qgl##name;
-QGL_1_2_PROCS
-QGL_1_3_PROCS
-QGL_1_4_PROCS
-QGL_1_5_PROCS
-QGL_2_0_PROCS
-#undef GLE
-
 // GL_NVX_gpu_memory_info
 #ifndef GL_NVX_gpu_memory_info
 #define GL_NVX_gpu_memory_info
@@ -495,27 +487,18 @@ QGL_2_0_PROCS
 #endif
 
 // GL_EXT_framebuffer_object
-extern GLboolean (APIENTRY * qglIsRenderbufferEXT)(GLuint renderbuffer);
-extern void (APIENTRY * qglBindRenderbufferEXT)(GLenum target, GLuint renderbuffer);
-extern void (APIENTRY * qglDeleteRenderbuffersEXT)(GLsizei n, const GLuint *renderbuffers);
-extern void (APIENTRY * qglGenRenderbuffersEXT)(GLsizei n, GLuint *renderbuffers);
-extern void (APIENTRY * qglRenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
-extern void (APIENTRY * qglGetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint *params);
-extern GLboolean (APIENTRY * qglIsFramebufferEXT)(GLuint framebuffer);
-extern void (APIENTRY * qglBindFramebufferEXT)(GLenum target, GLuint framebuffer);
-extern void (APIENTRY * qglDeleteFramebuffersEXT)(GLsizei n, const GLuint *framebuffers);
-extern void (APIENTRY * qglGenFramebuffersEXT)(GLsizei n, GLuint *framebuffers);
-extern GLenum (APIENTRY * qglCheckFramebufferStatusEXT)(GLenum target);
-extern void (APIENTRY * qglFramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
-	GLint level);
-extern void (APIENTRY * qglFramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
-	GLint level);
-extern void (APIENTRY * qglFramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
-	GLint level, GLint zoffset);
-extern void (APIENTRY * qglFramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget,
-	GLuint renderbuffer);
-extern void (APIENTRY * qglGetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint *params);
-extern void (APIENTRY * qglGenerateMipmapEXT)(GLenum target);
+#define QGL_EXT_framebuffer_object_PROCS \
+	GLE(void, BindRenderbufferEXT, GLenum target, GLuint renderbuffer) \
+	GLE(void, DeleteRenderbuffersEXT, GLsizei n, const GLuint *renderbuffers) \
+	GLE(void, GenRenderbuffersEXT, GLsizei n, GLuint *renderbuffers) \
+	GLE(void, RenderbufferStorageEXT, GLenum target, GLenum internalformat, GLsizei width, GLsizei height) \
+	GLE(void, BindFramebufferEXT, GLenum target, GLuint framebuffer) \
+	GLE(void, DeleteFramebuffersEXT, GLsizei n, const GLuint *framebuffers) \
+	GLE(void, GenFramebuffersEXT, GLsizei n, GLuint *framebuffers) \
+	GLE(GLenum, CheckFramebufferStatusEXT, GLenum target) \
+	GLE(void, FramebufferTexture2DEXT, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) \
+	GLE(void, FramebufferRenderbufferEXT, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) \
+	GLE(void, GenerateMipmapEXT, GLenum target) \
 
 #ifndef GL_EXT_framebuffer_object
 #define GL_EXT_framebuffer_object
@@ -572,19 +555,9 @@ extern void (APIENTRY * qglGenerateMipmapEXT)(GLenum target);
 #define GL_INVALID_FRAMEBUFFER_OPERATION_EXT   0x0506
 #endif
 
-// GL_EXT_packed_depth_stencil
-#ifndef GL_EXT_packed_depth_stencil
-#define GL_EXT_packed_depth_stencil
-#define GL_DEPTH_STENCIL_EXT                              0x84F9
-#define GL_UNSIGNED_INT_24_8_EXT                          0x84FA
-#define GL_DEPTH24_STENCIL8_EXT                           0x88F0
-#define GL_TEXTURE_STENCIL_SIZE_EXT                       0x88F1
-#endif
-
 // GL_EXT_framebuffer_blit
-extern void (APIENTRY * qglBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
-                            GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
-                            GLbitfield mask, GLenum filter);
+#define QGL_EXT_framebuffer_blit_PROCS \
+	GLE(void, BlitFramebufferEXT, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) \
 
 #ifndef GL_EXT_framebuffer_blit
 #define GL_EXT_framebuffer_blit
@@ -595,8 +568,8 @@ extern void (APIENTRY * qglBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint s
 #endif
 
 // GL_EXT_framebuffer_multisample
-extern void (APIENTRY * qglRenderbufferStorageMultisampleEXT)(GLenum target, GLsizei samples,
-	GLenum internalformat, GLsizei width, GLsizei height);
+#define QGL_EXT_framebuffer_multisample_PROCS \
+	GLE(void, RenderbufferStorageMultisampleEXT, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) \
 
 #ifndef GL_EXT_framebuffer_multisample
 #define GL_EXT_framebuffer_multisample
@@ -605,31 +578,6 @@ extern void (APIENTRY * qglRenderbufferStorageMultisampleEXT)(GLenum target, GLs
 #define GL_MAX_SAMPLES_EXT                         0x8D57
 #endif
 
-#ifndef GL_EXT_texture_sRGB
-#define GL_EXT_texture_sRGB
-#define GL_SRGB_EXT                                       0x8C40
-#define GL_SRGB8_EXT                                      0x8C41
-#define GL_SRGB_ALPHA_EXT                                 0x8C42
-#define GL_SRGB8_ALPHA8_EXT                               0x8C43
-#define GL_SLUMINANCE_ALPHA_EXT                           0x8C44
-#define GL_SLUMINANCE8_ALPHA8_EXT                         0x8C45
-#define GL_SLUMINANCE_EXT                                 0x8C46
-#define GL_SLUMINANCE8_EXT                                0x8C47
-#define GL_COMPRESSED_SRGB_EXT                            0x8C48
-#define GL_COMPRESSED_SRGB_ALPHA_EXT                      0x8C49
-#define GL_COMPRESSED_SLUMINANCE_EXT                      0x8C4A
-#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT                0x8C4B
-#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT                  0x8C4C
-#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT            0x8C4D
-#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT            0x8C4E
-#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT            0x8C4F
-#endif
-
-#ifndef GL_EXT_framebuffer_sRGB
-#define GL_EXT_framebuffer_sRGB
-#define GL_FRAMEBUFFER_SRGB_EXT                         0x8DB9
-#endif
-
 #ifndef GL_ARB_texture_compression_rgtc
 #define GL_ARB_texture_compression_rgtc
 #define GL_COMPRESSED_RED_RGTC1                       0x8DBB
@@ -657,91 +605,51 @@ extern void (APIENTRY * qglRenderbufferStorageMultisampleEXT)(GLenum target, GLs
 #endif
 
 // GL_ARB_vertex_array_object
-extern void (APIENTRY * qglBindVertexArrayARB)(GLuint array);
-extern void (APIENTRY * qglDeleteVertexArraysARB)(GLsizei n, const GLuint *arrays);
-extern void (APIENTRY * qglGenVertexArraysARB)(GLsizei n, GLuint *arrays);
-extern GLboolean (APIENTRY * qglIsVertexArrayARB)(GLuint array);
+#define QGL_ARB_vertex_array_object_PROCS \
+	GLE(void, BindVertexArray, GLuint array) \
+	GLE(void, DeleteVertexArrays, GLsizei n, const GLuint *arrays) \
+	GLE(void, GenVertexArrays, GLsizei n, GLuint *arrays) \
+
 #ifndef GL_ARB_vertex_array_object
 #define GL_ARB_vertex_array_object
 #define GL_VERTEX_ARRAY_BINDING_ARB                0x85B5
 #endif
 
 // GL_EXT_direct_state_access
-extern GLvoid(APIENTRY * qglBindMultiTexture)(GLenum texunit, GLenum target, GLuint texture);
-extern GLvoid(APIENTRY * qglTextureParameterf)(GLuint texture, GLenum target, GLenum pname, GLfloat param);
-extern GLvoid(APIENTRY * qglTextureParameteri)(GLuint texture, GLenum target, GLenum pname, GLint param);
-extern GLvoid(APIENTRY * qglTextureImage2D)(GLuint texture, GLenum target, GLint level, GLint internalformat,
-	GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
-extern GLvoid(APIENTRY * qglTextureSubImage2D)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset,
-	GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
-extern GLvoid(APIENTRY * qglCopyTextureImage2D)(GLuint texture, GLenum target, GLint level, GLenum internalformat,
-	GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
-extern GLvoid(APIENTRY * qglCompressedTextureImage2D)(GLuint texture, GLenum target, GLint level, GLenum internalformat,
-	GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
-extern GLvoid(APIENTRY * qglCompressedTextureSubImage2D)(GLuint texture, GLenum target, GLint level,
-	GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format,
-	GLsizei imageSize, const GLvoid *data);
-extern GLvoid(APIENTRY * qglGenerateTextureMipmap)(GLuint texture, GLenum target);
-
-extern GLvoid(APIENTRY * qglProgramUniform1i)(GLuint program, GLint location, GLint v0);
-extern GLvoid(APIENTRY * qglProgramUniform1f)(GLuint program, GLint location, GLfloat v0);
-extern GLvoid(APIENTRY * qglProgramUniform2f)(GLuint program, GLint location,
-	GLfloat v0, GLfloat v1);
-extern GLvoid(APIENTRY * qglProgramUniform3f)(GLuint program, GLint location,
-	GLfloat v0, GLfloat v1, GLfloat v2);
-extern GLvoid(APIENTRY * qglProgramUniform4f)(GLuint program, GLint location,
-	GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
-extern GLvoid(APIENTRY * qglProgramUniform1fv)(GLuint program, GLint location,
-	GLsizei count, const GLfloat *value);
-extern GLvoid(APIENTRY * qglProgramUniformMatrix4fv)(GLuint program, GLint location,
-	GLsizei count, GLboolean transpose,
-	const GLfloat *value);
-
-extern GLvoid(APIENTRY * qglNamedRenderbufferStorage)(GLuint renderbuffer,
-	GLenum internalformat, GLsizei width, GLsizei height);
-
-extern GLvoid(APIENTRY * qglNamedRenderbufferStorageMultisample)(GLuint renderbuffer,
-	GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
-
-extern GLenum(APIENTRY * qglCheckNamedFramebufferStatus)(GLuint framebuffer, GLenum target);
-extern GLvoid(APIENTRY * qglNamedFramebufferTexture2D)(GLuint framebuffer,
-	GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-extern GLvoid(APIENTRY * qglNamedFramebufferRenderbuffer)(GLuint framebuffer,
-	GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
-
-
-
-
-#if defined(WIN32)
-// WGL_ARB_create_context
-#ifndef WGL_ARB_create_context
-#define WGL_CONTEXT_MAJOR_VERSION_ARB             0x2091
-#define WGL_CONTEXT_MINOR_VERSION_ARB             0x2092
-#define WGL_CONTEXT_LAYER_PLANE_ARB               0x2093
-#define WGL_CONTEXT_FLAGS_ARB                     0x2094
-#define WGL_CONTEXT_PROFILE_MASK_ARB              0x9126
-#define WGL_CONTEXT_DEBUG_BIT_ARB                 0x0001
-#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB    0x0002
-#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB          0x00000001
-#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
-#define ERROR_INVALID_VERSION_ARB                 0x2095
-#define ERROR_INVALID_PROFILE_ARB                 0x2096
-#endif
+#define QGL_EXT_direct_state_access_PROCS \
+	GLE(GLvoid, BindMultiTexture, GLenum texunit, GLenum target, GLuint texture) \
+	GLE(GLvoid, TextureParameterf, GLuint texture, GLenum target, GLenum pname, GLfloat param) \
+	GLE(GLvoid, TextureParameteri, GLuint texture, GLenum target, GLenum pname, GLint param) \
+	GLE(GLvoid, TextureImage2D, GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) \
+	GLE(GLvoid, TextureSubImage2D, GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) \
+	GLE(GLvoid, CopyTextureImage2D, GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) \
+	GLE(GLvoid, CompressedTextureImage2D, GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) \
+	GLE(GLvoid, CompressedTextureSubImage2D, GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) \
+	GLE(GLvoid, GenerateTextureMipmap, GLuint texture, GLenum target) \
+	GLE(GLvoid, ProgramUniform1i, GLuint program, GLint location, GLint v0) \
+	GLE(GLvoid, ProgramUniform1f, GLuint program, GLint location, GLfloat v0) \
+	GLE(GLvoid, ProgramUniform2f, GLuint program, GLint location, GLfloat v0, GLfloat v1) \
+	GLE(GLvoid, ProgramUniform3f, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) \
+	GLE(GLvoid, ProgramUniform4f, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) \
+	GLE(GLvoid, ProgramUniform1fv, GLuint program, GLint location, GLsizei count, const GLfloat *value) \
+	GLE(GLvoid, ProgramUniformMatrix4fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) \
+	GLE(GLvoid, NamedRenderbufferStorage, GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height) \
+	GLE(GLvoid, NamedRenderbufferStorageMultisample, GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) \
+	GLE(GLenum, CheckNamedFramebufferStatus, GLuint framebuffer, GLenum target) \
+	GLE(GLvoid, NamedFramebufferTexture2D, GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) \
+	GLE(GLvoid, NamedFramebufferRenderbuffer, GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) \
 
-extern          HGLRC(APIENTRY * qwglCreateContextAttribsARB) (HDC hdC, HGLRC hShareContext, const int *attribList);
-#endif
-
-#if 0 //defined(__linux__)
-// GLX_ARB_create_context
-#ifndef GLX_ARB_create_context
-#define GLX_CONTEXT_DEBUG_BIT_ARB          0x00000001
-#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
-#define GLX_CONTEXT_MAJOR_VERSION_ARB      0x2091
-#define GLX_CONTEXT_MINOR_VERSION_ARB      0x2092
-#define GLX_CONTEXT_FLAGS_ARB              0x2094
-#endif
-
-extern GLXContext	(APIENTRY * qglXCreateContextAttribsARB) (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);
-#endif
+#define GLE(ret, name, ...) typedef ret APIENTRY name##proc(__VA_ARGS__); extern name##proc * qgl##name;
+QGL_1_2_PROCS;
+QGL_1_3_PROCS;
+QGL_1_4_PROCS;
+QGL_1_5_PROCS;
+QGL_2_0_PROCS;
+QGL_EXT_framebuffer_object_PROCS;
+QGL_EXT_framebuffer_blit_PROCS;
+QGL_EXT_framebuffer_multisample_PROCS;
+QGL_ARB_vertex_array_object_PROCS;
+QGL_EXT_direct_state_access_PROCS;
+#undef GLE
 
 #endif
diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c
index f9dcd03..b8ca113 100644
--- a/code/renderergl2/tr_backend.c
+++ b/code/renderergl2/tr_backend.c
@@ -1184,7 +1184,7 @@ const void	*RB_DrawSurfs( const void *data ) {
 			RB_DrawSun(0.1, tr.sunShader);
 		}
 
-		if (r_drawSunRays->integer)
+		if (glRefConfig.framebufferObject && r_drawSunRays->integer)
 		{
 			FBO_t *oldFbo = glState.currentFBO;
 			FBO_Bind(tr.sunRaysFbo);
diff --git a/code/renderergl2/tr_bsp.c b/code/renderergl2/tr_bsp.c
index 2b3f0a5..2feeddb 100644
--- a/code/renderergl2/tr_bsp.c
+++ b/code/renderergl2/tr_bsp.c
@@ -3526,7 +3526,7 @@ void RE_LoadWorldMap( const char *name ) {
 	R_BindNullVao();
 
 	// Render or load all cubemaps
-	if (r_cubeMapping->integer && tr.numCubemaps)
+	if (r_cubeMapping->integer && tr.numCubemaps && glRefConfig.framebufferObject)
 	{
 		R_LoadCubemaps();
 		R_RenderMissingCubemaps();
diff --git a/code/renderergl2/tr_extensions.c b/code/renderergl2/tr_extensions.c
index e150079..3882434 100644
--- a/code/renderergl2/tr_extensions.c
+++ b/code/renderergl2/tr_extensions.c
@@ -36,6 +36,11 @@ QGL_1_3_PROCS;
 QGL_1_4_PROCS;
 QGL_1_5_PROCS;
 QGL_2_0_PROCS;
+QGL_EXT_framebuffer_object_PROCS;
+QGL_EXT_framebuffer_blit_PROCS;
+QGL_EXT_framebuffer_multisample_PROCS;
+QGL_ARB_vertex_array_object_PROCS;
+QGL_EXT_direct_state_access_PROCS;
 #undef GLE
 
 // GL_EXT_framebuffer_object
@@ -142,18 +147,23 @@ void GLimp_InitExtraExtensions()
 	char *extension;
 	const char* result[3] = { "...ignoring %s\n", "...using %s\n", "...%s not found\n" };
 
+	// Check OpenGL version
 	sscanf(glConfig.version_string, "%d.%d", &glRefConfig.openglMajorVersion, &glRefConfig.openglMinorVersion);
 	if (glRefConfig.openglMajorVersion < 2)
 		ri.Error(ERR_FATAL, "OpenGL 2.0 required!");
 	ri.Printf(PRINT_ALL, "...using OpenGL %s\n", glConfig.version_string);
 
-	// GL function loader, based on https://gist.github.com/rygorous/16796a0c876cf8a5f542caddb55bce8a
+	// set DSA fallbacks
+#define GLE(ret, name, ...) qgl##name = GLDSA_##name;
+	QGL_EXT_direct_state_access_PROCS;
+#undef GLE
 
+	// GL function loader, based on https://gist.github.com/rygorous/16796a0c876cf8a5f542caddb55bce8a
 #define GLE(ret, name, ...) qgl##name = (name##proc *) SDL_GL_GetProcAddress("gl" #name);
 
 	// OpenGL 1.2, was GL_EXT_draw_range_elements
 	QGL_1_2_PROCS;
-	glRefConfig.drawRangeElements = r_ext_draw_range_elements->integer ? qtrue : qfalse;
+	glRefConfig.drawRangeElements = !!r_ext_draw_range_elements->integer;
 	ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], "glDrawRangeElements()");
 
 	// OpenGL 1.3, was GL_ARB_texture_compression
@@ -161,8 +171,8 @@ void GLimp_InitExtraExtensions()
 
 	// OpenGL 1.4, was GL_EXT_multi_draw_arrays
 	QGL_1_4_PROCS;
-	glRefConfig.drawRangeElements = r_ext_multi_draw_arrays->integer ? qtrue : qfalse;
-	ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], "glMultiDrawElements()");
+	glRefConfig.multiDrawArrays = !!r_ext_multi_draw_arrays->integer;
+	ri.Printf(PRINT_ALL, result[glRefConfig.multiDrawArrays], "glMultiDrawElements()");
 
 	// OpenGL 1.5, was GL_ARB_vertex_buffer_object and GL_ARB_occlusion_query
 	QGL_1_5_PROCS;
@@ -171,8 +181,7 @@ void GLimp_InitExtraExtensions()
 	// OpenGL 2.0, was GL_ARB_shading_language_100, GL_ARB_vertex_program, GL_ARB_shader_objects, and GL_ARB_vertex_shader
 	QGL_2_0_PROCS;
 
-#undef GLE
-
+	// Determine GLSL version
 	if (1)
 	{
 		char version[256];
@@ -186,23 +195,45 @@ void GLimp_InitExtraExtensions()
 
 	glRefConfig.memInfo = MI_NONE;
 
-	if( GLimp_HaveExtension( "GL_NVX_gpu_memory_info" ) )
+	// GL_NVX_gpu_memory_info
+	extension = "GL_NVX_gpu_memory_info";
+	if( GLimp_HaveExtension( extension ) )
 	{
 		glRefConfig.memInfo = MI_NVX;
+
+		ri.Printf(PRINT_ALL, result[1], extension);
 	}
-	else if( GLimp_HaveExtension( "GL_ATI_meminfo" ) )
+	else
 	{
-		glRefConfig.memInfo = MI_ATI;
+		ri.Printf(PRINT_ALL, result[2], extension);
 	}
 
-	extension = "GL_ARB_texture_non_power_of_two";
-	glRefConfig.textureNonPowerOfTwo = qfalse;
+	// GL_ATI_meminfo
+	extension = "GL_ATI_meminfo";
 	if( GLimp_HaveExtension( extension ) )
 	{
-		if(1) //(r_ext_texture_non_power_of_two->integer)
+		if (glRefConfig.memInfo == MI_NONE)
 		{
-			glRefConfig.textureNonPowerOfTwo = qtrue;
+			glRefConfig.memInfo = MI_ATI;
+
+			ri.Printf(PRINT_ALL, result[1], extension);
 		}
+		else
+		{
+			ri.Printf(PRINT_ALL, result[0], extension);
+		}
+	}
+	else
+	{
+		ri.Printf(PRINT_ALL, result[2], extension);
+	}
+
+	// GL_ARB_texture_non_power_of_two
+	extension = "GL_ARB_texture_non_power_of_two";
+	glRefConfig.textureNonPowerOfTwo = qfalse;
+	if( GLimp_HaveExtension( extension ) )
+	{
+		glRefConfig.textureNonPowerOfTwo = qtrue; // !!r_ext_texture_non_power_of_two->integer
 
 		ri.Printf(PRINT_ALL, result[glRefConfig.textureNonPowerOfTwo], extension);
 	}
@@ -216,10 +247,7 @@ void GLimp_InitExtraExtensions()
 	glRefConfig.textureFloat = qfalse;
 	if( GLimp_HaveExtension( extension ) )
 	{
-		if( r_ext_texture_float->integer )
-		{
-			glRefConfig.textureFloat = qtrue;
-		}
+		glRefConfig.textureFloat = !!r_ext_texture_float->integer;
 
 		ri.Printf(PRINT_ALL, result[glRefConfig.textureFloat], extension);
 	}
@@ -233,8 +261,7 @@ void GLimp_InitExtraExtensions()
 	glRefConfig.halfFloatPixel = qfalse;
 	if( GLimp_HaveExtension( extension ) )
 	{
-		if( r_arb_half_float_pixel->integer )
-			glRefConfig.halfFloatPixel = qtrue;
+		glRefConfig.halfFloatPixel = !!r_arb_half_float_pixel->integer;
 
 		ri.Printf(PRINT_ALL, result[glRefConfig.halfFloatPixel], extension);
 	}
@@ -248,29 +275,12 @@ void GLimp_InitExtraExtensions()
 	glRefConfig.framebufferObject = qfalse;
 	if( GLimp_HaveExtension( extension ) )
 	{
+		glRefConfig.framebufferObject = !!r_ext_framebuffer_object->integer;
+
 		glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE_EXT, &glRefConfig.maxRenderbufferSize);
 		glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &glRefConfig.maxColorAttachments);
 
-		qglIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC) SDL_GL_GetProcAddress("glIsRenderbufferEXT");
-		qglBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC) SDL_GL_GetProcAddress("glBindRenderbufferEXT");
-		qglDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC) SDL_GL_GetProcAddress("glDeleteRenderbuffersEXT");
-		qglGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC) SDL_GL_GetProcAddress("glGenRenderbuffersEXT");
-		qglRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC) SDL_GL_GetProcAddress("glRenderbufferStorageEXT");
-		qglGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) SDL_GL_GetProcAddress("glGetRenderbufferParameterivEXT");
-		qglIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC) SDL_GL_GetProcAddress("glIsFramebufferEXT");
-		qglBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) SDL_GL_GetProcAddress("glBindFramebufferEXT");
-		qglDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) SDL_GL_GetProcAddress("glDeleteFramebuffersEXT");
-		qglGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) SDL_GL_GetProcAddress("glGenFramebuffersEXT");
-		qglCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) SDL_GL_GetProcAddress("glCheckFramebufferStatusEXT");
-		qglFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) SDL_GL_GetProcAddress("glFramebufferTexture1DEXT");
-		qglFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) SDL_GL_GetProcAddress("glFramebufferTexture2DEXT");
-		qglFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) SDL_GL_GetProcAddress("glFramebufferTexture3DEXT");
-		qglFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) SDL_GL_GetProcAddress("glFramebufferRenderbufferEXT");
-		qglGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) SDL_GL_GetProcAddress("glGetFramebufferAttachmentParameterivEXT");
-		qglGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC) SDL_GL_GetProcAddress("glGenerateMipmapEXT");
-
-		if(r_ext_framebuffer_object->value)
-			glRefConfig.framebufferObject = qtrue;
+		QGL_EXT_framebuffer_object_PROCS;
 
 		ri.Printf(PRINT_ALL, result[glRefConfig.framebufferObject], extension);
 	}
@@ -279,26 +289,15 @@ void GLimp_InitExtraExtensions()
 		ri.Printf(PRINT_ALL, result[2], extension);
 	}
 
-	// GL_EXT_packed_depth_stencil
-	extension = "GL_EXT_packed_depth_stencil";
-	glRefConfig.packedDepthStencil = qfalse;
-	if( GLimp_HaveExtension(extension))
-	{
-		glRefConfig.packedDepthStencil = qtrue;
-		ri.Printf(PRINT_ALL, result[glRefConfig.packedDepthStencil], extension);
-	}
-	else
-	{
-		ri.Printf(PRINT_ALL, result[2], extension);
-	}
-
 	// GL_EXT_framebuffer_blit
 	extension = "GL_EXT_framebuffer_blit";
 	glRefConfig.framebufferBlit = qfalse;
 	if (GLimp_HaveExtension(extension))
 	{
-		qglBlitFramebufferEXT = (void *)SDL_GL_GetProcAddress("glBlitFramebufferEXT");
 		glRefConfig.framebufferBlit = qtrue;
+
+		QGL_EXT_framebuffer_blit_PROCS;
+
 		ri.Printf(PRINT_ALL, result[glRefConfig.framebufferBlit], extension);
 	}
 	else
@@ -311,8 +310,10 @@ void GLimp_InitExtraExtensions()
 	glRefConfig.framebufferMultisample = qfalse;
 	if (GLimp_HaveExtension(extension))
 	{
-		qglRenderbufferStorageMultisampleEXT = (void *)SDL_GL_GetProcAddress("glRenderbufferStorageMultisampleEXT");
 		glRefConfig.framebufferMultisample = qtrue;
+
+		QGL_EXT_framebuffer_multisample_PROCS;
+
 		ri.Printf(PRINT_ALL, result[glRefConfig.framebufferMultisample], extension);
 	}
 	else
@@ -326,10 +327,12 @@ void GLimp_InitExtraExtensions()
 	extension = "GL_ARB_texture_compression_rgtc";
 	if (GLimp_HaveExtension(extension))
 	{
-		if (r_ext_compressed_textures->integer)
+		qboolean useRgtc = r_ext_compressed_textures->integer >= 1;
+
+		if (useRgtc)
 			glRefConfig.textureCompression |= TCR_RGTC;
 
-		ri.Printf(PRINT_ALL, result[r_ext_compressed_textures->integer ? 1 : 0], extension);
+		ri.Printf(PRINT_ALL, result[useRgtc], extension);
 	}
 	else
 	{
@@ -342,10 +345,12 @@ void GLimp_InitExtraExtensions()
 	extension = "GL_ARB_texture_compression_bptc";
 	if (GLimp_HaveExtension(extension))
 	{
-		if (r_ext_compressed_textures->integer >= 2)
+		qboolean useBptc = r_ext_compressed_textures->integer >= 2;
+
+		if (useBptc)
 			glRefConfig.textureCompression |= TCR_BPTC;
 
-		ri.Printf(PRINT_ALL, result[(r_ext_compressed_textures->integer >= 2) ? 1 : 0], extension);
+		ri.Printf(PRINT_ALL, result[useBptc], extension);
 	}
 	else
 	{
@@ -358,7 +363,8 @@ void GLimp_InitExtraExtensions()
 	if( GLimp_HaveExtension( extension ) )
 	{
 		glRefConfig.depthClamp = qtrue;
-		ri.Printf(PRINT_ALL, result[1], extension);
+
+		ri.Printf(PRINT_ALL, result[glRefConfig.depthClamp], extension);
 	}
 	else
 	{
@@ -370,8 +376,7 @@ void GLimp_InitExtraExtensions()
 	glRefConfig.seamlessCubeMap = qfalse;
 	if( GLimp_HaveExtension( extension ) )
 	{
-		if (r_arb_seamless_cube_map->integer)
-			glRefConfig.seamlessCubeMap = qtrue;
+		glRefConfig.seamlessCubeMap = !!r_arb_seamless_cube_map->integer;
 
 		ri.Printf(PRINT_ALL, result[glRefConfig.seamlessCubeMap], extension);
 	}
@@ -385,10 +390,12 @@ void GLimp_InitExtraExtensions()
 	glRefConfig.packedNormalDataType = GL_BYTE;
 	if( GLimp_HaveExtension( extension ) )
 	{
-		if (r_arb_vertex_type_2_10_10_10_rev->integer)
+		qboolean useExt = !!r_arb_vertex_type_2_10_10_10_rev->integer;
+
+		if (useExt)
 			glRefConfig.packedNormalDataType = GL_INT_2_10_10_10_REV;
 
-		ri.Printf(PRINT_ALL, result[r_arb_vertex_type_2_10_10_10_rev->integer ? 1 : 0], extension);
+		ri.Printf(PRINT_ALL, result[useExt], extension);
 	}
 	else
 	{
@@ -403,15 +410,11 @@ void GLimp_InitExtraExtensions()
 	glRefConfig.vertexArrayObject = qfalse;
 	if( GLimp_HaveExtension( extension ) )
 	{
-		qglBindVertexArrayARB = (void *) SDL_GL_GetProcAddress("glBindVertexArray");
-		qglDeleteVertexArraysARB = (void *) SDL_GL_GetProcAddress("glDeleteVertexArrays");
-		qglGenVertexArraysARB = (void *) SDL_GL_GetProcAddress("glGenVertexArrays");
-		qglIsVertexArrayARB = (void *) SDL_GL_GetProcAddress("glIsVertexArray");
+		glRefConfig.vertexArrayObject = !!r_arb_vertex_array_object->integer;
 
-		if (r_arb_vertex_array_object->integer)
-			glRefConfig.vertexArrayObject = qtrue;
+		QGL_ARB_vertex_array_object_PROCS;
 
-		ri.Printf(PRINT_ALL, result[glRefConfig.vertexArrayObject ? 1 : 0], extension);
+		ri.Printf(PRINT_ALL, result[glRefConfig.vertexArrayObject], extension);
 	}
 	else
 	{
@@ -426,7 +429,9 @@ void GLimp_InitExtraExtensions()
 	glRefConfig.packedColorDataSize    = sizeof(float) * 4;
 	if( GLimp_HaveExtension( extension ) )
 	{
-		if (r_arb_half_float_vertex->integer)
+		qboolean useExt = !!r_arb_half_float_vertex->integer;
+
+		if (useExt)
 		{
 			glRefConfig.packedTexcoordDataType = GL_HALF_FLOAT;
 			glRefConfig.packedTexcoordDataSize = sizeof(uint16_t) * 2;
@@ -434,7 +439,7 @@ void GLimp_InitExtraExtensions()
 			glRefConfig.packedColorDataSize    = sizeof(uint16_t) * 4;
 		}
 
-		ri.Printf(PRINT_ALL, result[r_arb_half_float_vertex->integer ? 1 : 0], extension);
+		ri.Printf(PRINT_ALL, result[useExt], extension);
 	}
 	else
 	{
@@ -443,66 +448,23 @@ void GLimp_InitExtraExtensions()
 
 	// GL_EXT_direct_state_access
 	extension = "GL_EXT_direct_state_access";
-
-	qglBindMultiTexture = GLDSA_BindMultiTexture;
-	qglTextureParameterf = GLDSA_TextureParameterf;
-	qglTextureParameteri = GLDSA_TextureParameteri;
-	qglTextureImage2D = GLDSA_TextureImage2D;
-	qglTextureSubImage2D = GLDSA_TextureSubImage2D;
-	qglCopyTextureImage2D = GLDSA_CopyTextureImage2D;
-	qglCompressedTextureImage2D = GLDSA_CompressedTextureImage2D;
-	qglCompressedTextureSubImage2D = GLDSA_CompressedTextureSubImage2D;
-	qglGenerateTextureMipmap = GLDSA_GenerateTextureMipmap;
-
-	qglProgramUniform1i = GLDSA_ProgramUniform1i;
-	qglProgramUniform1f = GLDSA_ProgramUniform1f;
-	qglProgramUniform2f = GLDSA_ProgramUniform2f;
-	qglProgramUniform3f = GLDSA_ProgramUniform3f;
-	qglProgramUniform4f = GLDSA_ProgramUniform4f;
-	qglProgramUniform1fv = GLDSA_ProgramUniform1fv;
-	qglProgramUniformMatrix4fv = GLDSA_ProgramUniformMatrix4fv;
-
-	qglNamedRenderbufferStorage = GLDSA_NamedRenderbufferStorage;
-	qglNamedRenderbufferStorageMultisample = GLDSA_NamedRenderbufferStorageMultisample;
-	qglCheckNamedFramebufferStatus = GLDSA_CheckNamedFramebufferStatus;
-	qglNamedFramebufferTexture2D = GLDSA_NamedFramebufferTexture2D;
-	qglNamedFramebufferRenderbuffer = GLDSA_NamedFramebufferRenderbuffer;
-
 	glRefConfig.directStateAccess = qfalse;
 	if (GLimp_HaveExtension(extension))
 	{
-		if (r_ext_direct_state_access->integer)
+		glRefConfig.directStateAccess = !!r_ext_direct_state_access->integer;
+
+		// QGL_*_PROCS becomes several functions, do not remove {}
+		if (glRefConfig.directStateAccess)
 		{
-			glRefConfig.directStateAccess = qtrue;
-			qglBindMultiTexture = (void *)SDL_GL_GetProcAddress("glBindMultiTextureEXT");
-			qglTextureParameterf = (void *)SDL_GL_GetProcAddress("glTextureParameterfEXT");
-			qglTextureParameteri = (void *)SDL_GL_GetProcAddress("glTextureParameteriEXT");
-			qglTextureImage2D = (void *)SDL_GL_GetProcAddress("glTextureImage2DEXT");
-			qglTextureSubImage2D = (void *)SDL_GL_GetProcAddress("glTextureSubImage2DEXT");
-			qglCopyTextureImage2D = (void *)SDL_GL_GetProcAddress("glCopyTextureImage2DEXT");
-			qglCompressedTextureImage2D = (void *)SDL_GL_GetProcAddress("glCompressedTextureImage2DEXT");
-			qglCompressedTextureSubImage2D = (void *)SDL_GL_GetProcAddress("glCompressedTextureSubImage2DEXT");
-			qglGenerateTextureMipmap = (void *)SDL_GL_GetProcAddress("glGenerateTextureMipmapEXT");
-
-			qglProgramUniform1i = (void *)SDL_GL_GetProcAddress("glProgramUniform1iEXT");
-			qglProgramUniform1f = (void *)SDL_GL_GetProcAddress("glProgramUniform1fEXT");
-			qglProgramUniform2f = (void *)SDL_GL_GetProcAddress("glProgramUniform2fEXT");
-			qglProgramUniform3f = (void *)SDL_GL_GetProcAddress("glProgramUniform3fEXT");
-			qglProgramUniform4f = (void *)SDL_GL_GetProcAddress("glProgramUniform4fEXT");
-			qglProgramUniform1fv = (void *)SDL_GL_GetProcAddress("glProgramUniform1fvEXT");
-			qglProgramUniformMatrix4fv = (void *)SDL_GL_GetProcAddress("glProgramUniformMatrix4fvEXT");
-
-			qglNamedRenderbufferStorage = (void *)SDL_GL_GetProcAddress("glNamedRenderbufferStorageEXT");
-			qglNamedRenderbufferStorageMultisample = (void *)SDL_GL_GetProcAddress("glNamedRenderbufferStorageMultisampleEXT");
-			qglCheckNamedFramebufferStatus = (void *)SDL_GL_GetProcAddress("glCheckNamedFramebufferStatusEXT");
-			qglNamedFramebufferTexture2D = (void *)SDL_GL_GetProcAddress("glNamedFramebufferTexture2DEXT");
-			qglNamedFramebufferRenderbuffer = (void *)SDL_GL_GetProcAddress("glNamedFramebufferRenderbufferEXT");
+			QGL_EXT_direct_state_access_PROCS;
 		}
 
-		ri.Printf(PRINT_ALL, result[glRefConfig.directStateAccess ? 1 : 0], extension);
+		ri.Printf(PRINT_ALL, result[glRefConfig.directStateAccess], extension);
 	}
 	else
 	{
 		ri.Printf(PRINT_ALL, result[2], extension);
 	}
+
+#undef GLE
 }
diff --git a/code/renderergl2/tr_image.c b/code/renderergl2/tr_image.c
index 7f8f246..f267069 100644
--- a/code/renderergl2/tr_image.c
+++ b/code/renderergl2/tr_image.c
@@ -2763,11 +2763,8 @@ void R_CreateBuiltinImages( void ) {
 		if (r_drawSunRays->integer)
 			tr.sunRaysImage = R_CreateImage("*sunRays", NULL, width, height, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, rgbFormat);
 
-		if (glRefConfig.framebufferObject)
-		{
-			tr.renderDepthImage  = R_CreateImage("*renderdepth",  NULL, width, height, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24_ARB);
-			tr.textureDepthImage = R_CreateImage("*texturedepth", NULL, PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24_ARB);
-		}
+		tr.renderDepthImage  = R_CreateImage("*renderdepth",  NULL, width, height, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24_ARB);
+		tr.textureDepthImage = R_CreateImage("*texturedepth", NULL, PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24_ARB);
 
 		{
 			unsigned short sdata[4];
diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c
index 73c1c55..60c62ab 100644
--- a/code/renderergl2/tr_init.c
+++ b/code/renderergl2/tr_init.c
@@ -974,7 +974,7 @@ void GL_SetDefaultState( void )
 	GL_BindNullProgram();
 
 	if (glRefConfig.vertexArrayObject)
-		qglBindVertexArrayARB(0);
+		qglBindVertexArray(0);
 
 	qglBindBuffer(GL_ARRAY_BUFFER, 0);
 	qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h
index 202e1af..e81f854 100644
--- a/code/renderergl2/tr_local.h
+++ b/code/renderergl2/tr_local.h
@@ -1402,7 +1402,6 @@ typedef struct {
 	qboolean textureNonPowerOfTwo;
 	qboolean textureFloat;
 	qboolean halfFloatPixel;
-	qboolean packedDepthStencil;
 	textureCompressionRef_t textureCompression;
 	qboolean swizzleNormalmap;
 	
diff --git a/code/renderergl2/tr_shade.c b/code/renderergl2/tr_shade.c
index 356f213..1cfc42d 100644
--- a/code/renderergl2/tr_shade.c
+++ b/code/renderergl2/tr_shade.c
@@ -1292,7 +1292,9 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input )
 
 			if (r_sunlightMode->integer && (backEnd.viewParms.flags & VPF_USESUNLIGHT) && (pStage->glslShaderIndex & LIGHTDEF_LIGHTTYPE_MASK))
 			{
-				GL_BindToTMU(tr.screenShadowImage, TB_SHADOWMAP);
+				// FIXME: screenShadowImage is NULL if no framebuffers
+				if (tr.screenShadowImage)
+					GL_BindToTMU(tr.screenShadowImage, TB_SHADOWMAP);
 				GLSL_SetUniformVec3(sp, UNIFORM_PRIMARYLIGHTAMBIENT, backEnd.refdef.sunAmbCol);
 				if (r_pbr->integer)
 				{
@@ -1404,7 +1406,9 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input )
 			vec4_t vec;
 			cubemap_t *cubemap = &tr.cubemaps[input->cubemapIndex - 1];
 
-			GL_BindToTMU( cubemap->image, TB_CUBEMAP);
+			// FIXME: cubemap image could be NULL if cubemap isn't renderer or loaded
+			if (cubemap->image)
+				GL_BindToTMU( cubemap->image, TB_CUBEMAP);
 
 			VectorSubtract(cubemap->origin, backEnd.viewParms.or.origin, vec);
 			vec[3] = 1.0f;
diff --git a/code/renderergl2/tr_vbo.c b/code/renderergl2/tr_vbo.c
index 61ede4e..b1ff3d6 100644
--- a/code/renderergl2/tr_vbo.c
+++ b/code/renderergl2/tr_vbo.c
@@ -262,8 +262,8 @@ vao_t *R_CreateVao(const char *name, byte *vertexes, int vertexesSize, byte *ind
 
 	if (glRefConfig.vertexArrayObject)
 	{
-		qglGenVertexArraysARB(1, &vao->vao);
-		qglBindVertexArrayARB(vao->vao);
+		qglGenVertexArrays(1, &vao->vao);
+		qglBindVertexArray(vao->vao);
 	}
 
 
@@ -383,8 +383,8 @@ vao_t *R_CreateVao2(const char *name, int numVertexes, srfVert_t *verts, int num
 
 	if (glRefConfig.vertexArrayObject)
 	{
-		qglGenVertexArraysARB(1, &vao->vao);
-		qglBindVertexArrayARB(vao->vao);
+		qglGenVertexArrays(1, &vao->vao);
+		qglBindVertexArray(vao->vao);
 	}
 
 
@@ -480,7 +480,7 @@ void R_BindVao(vao_t * vao)
 
 		if (glRefConfig.vertexArrayObject)
 		{
-			qglBindVertexArrayARB(vao->vao);
+			qglBindVertexArray(vao->vao);
 
 			// why you no save GL_ELEMENT_ARRAY_BUFFER binding, Intel?
 			if (1)
@@ -515,7 +515,7 @@ void R_BindNullVao(void)
 	{
 		if (glRefConfig.vertexArrayObject)
 		{
-			qglBindVertexArrayARB(0);
+			qglBindVertexArray(0);
 
 			// why you no save GL_ELEMENT_ARRAY_BUFFER binding, Intel?
 			if (1) qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
@@ -654,7 +654,7 @@ void R_ShutdownVaos(void)
 		vao = tr.vaos[i];
 
 		if(vao->vao)
-			qglDeleteVertexArraysARB(1, &vao->vao);
+			qglDeleteVertexArrays(1, &vao->vao);
 
 		if(vao->vertexesVBO)
 		{

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/ioquake3.git



More information about the Pkg-games-commits mailing list