[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