[iortcw] 90/152: All: Rend2: Use loader for all extension funcs
Simon McVittie
smcv at debian.org
Fri Sep 8 10:40:16 UTC 2017
This is an automated email from the git hooks/post-receive script.
smcv pushed a commit to annotated tag 1.5a
in repository iortcw.
commit b676ddce177f086aef111fffac60d23d781a1270
Author: MAN-AT-ARMS <M4N4T4RMS at gmail.com>
Date: Fri Jul 29 19:42:23 2016 -0400
All: Rend2: Use loader for all extension funcs
---
MP/code/rend2/qgl.h | 201 ++++++++--------------------
MP/code/rend2/tr_backend.c | 22 ++--
MP/code/rend2/tr_bsp.c | 2 +-
MP/code/rend2/tr_dsa.c | 46 +++----
MP/code/rend2/tr_dsa.h | 42 +++---
MP/code/rend2/tr_extensions.c | 298 ++++++++++++------------------------------
MP/code/rend2/tr_fbo.c | 14 +-
MP/code/rend2/tr_glsl.c | 14 +-
MP/code/rend2/tr_image.c | 55 ++++----
MP/code/rend2/tr_init.c | 2 +-
MP/code/rend2/tr_local.h | 1 -
MP/code/rend2/tr_shade.c | 8 +-
MP/code/rend2/tr_vbo.c | 14 +-
SP/code/rend2/qgl.h | 200 ++++++++--------------------
SP/code/rend2/tr_backend.c | 22 ++--
SP/code/rend2/tr_bsp.c | 2 +-
SP/code/rend2/tr_dsa.c | 46 +++----
SP/code/rend2/tr_dsa.h | 42 +++---
SP/code/rend2/tr_extensions.c | 298 ++++++++++++------------------------------
SP/code/rend2/tr_fbo.c | 14 +-
SP/code/rend2/tr_glsl.c | 14 +-
SP/code/rend2/tr_image.c | 56 ++++----
SP/code/rend2/tr_init.c | 2 +-
SP/code/rend2/tr_local.h | 1 -
SP/code/rend2/tr_shade.c | 8 +-
SP/code/rend2/tr_vbo.c | 14 +-
26 files changed, 501 insertions(+), 937 deletions(-)
diff --git a/MP/code/rend2/qgl.h b/MP/code/rend2/qgl.h
index 351e6ae..c97bbe4 100644
--- a/MP/code/rend2/qgl.h
+++ b/MP/code/rend2/qgl.h
@@ -516,14 +516,6 @@ extern void ( APIENTRY * qglPNTrianglesfATI )( GLenum pname, GLfloat param );
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
@@ -572,28 +564,18 @@ QGL_2_0_PROCS
#define GL_HALF_FLOAT_ARB 0x140B
#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
@@ -650,19 +632,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
@@ -673,8 +645,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
@@ -683,31 +655,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
@@ -735,90 +682,52 @@ 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, BindMultiTextureEXT, GLenum texunit, GLenum target, GLuint texture) \
+ GLE(GLvoid, TextureParameterfEXT, GLuint texture, GLenum target, GLenum pname, GLfloat param) \
+ GLE(GLvoid, TextureParameteriEXT, GLuint texture, GLenum target, GLenum pname, GLint param) \
+ GLE(GLvoid, TextureImage2DEXT, GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) \
+ GLE(GLvoid, TextureSubImage2DEXT, GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) \
+ GLE(GLvoid, CopyTextureImage2DEXT, GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) \
+ GLE(GLvoid, CompressedTextureImage2DEXT, GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) \
+ GLE(GLvoid, CompressedTextureSubImage2DEXT, GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) \
+ GLE(GLvoid, GenerateTextureMipmapEXT, GLuint texture, GLenum target) \
+ GLE(GLvoid, ProgramUniform1iEXT, GLuint program, GLint location, GLint v0) \
+ GLE(GLvoid, ProgramUniform1fEXT, GLuint program, GLint location, GLfloat v0) \
+ GLE(GLvoid, ProgramUniform2fEXT, GLuint program, GLint location, GLfloat v0, GLfloat v1) \
+ GLE(GLvoid, ProgramUniform3fEXT, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) \
+ GLE(GLvoid, ProgramUniform4fEXT, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) \
+ GLE(GLvoid, ProgramUniform1fvEXT, GLuint program, GLint location, GLsizei count, const GLfloat *value) \
+ GLE(GLvoid, ProgramUniformMatrix4fvEXT, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) \
+ GLE(GLvoid, NamedRenderbufferStorageEXT, GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height) \
+ GLE(GLvoid, NamedRenderbufferStorageMultisampleEXT, GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) \
+ GLE(GLenum, CheckNamedFramebufferStatusEXT, GLuint framebuffer, GLenum target) \
+ GLE(GLvoid, NamedFramebufferTexture2DEXT, GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) \
+ GLE(GLvoid, NamedFramebufferRenderbufferEXT, 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 // __QGL_H__
diff --git a/MP/code/rend2/tr_backend.c b/MP/code/rend2/tr_backend.c
index 2334f1f..dcd2a69 100644
--- a/MP/code/rend2/tr_backend.c
+++ b/MP/code/rend2/tr_backend.c
@@ -883,16 +883,16 @@ void RE_UploadCinematic( int w, int h, int cols, int rows, const byte *data, int
if ( cols != tr.scratchImage[client]->width || rows != tr.scratchImage[client]->height ) {
tr.scratchImage[client]->width = tr.scratchImage[client]->uploadWidth = cols;
tr.scratchImage[client]->height = tr.scratchImage[client]->uploadHeight = rows;
- qglTextureImage2D(texture, GL_TEXTURE_2D, 0, GL_RGB8, cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
- qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
- qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ qglTextureImage2DEXT(texture, GL_TEXTURE_2D, 0, GL_RGB8, cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
+ qglTextureParameterfEXT(texture, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ qglTextureParameterfEXT(texture, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
+ qglTextureParameterfEXT(texture, GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ qglTextureParameterfEXT(texture, GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
} else {
if ( dirty ) {
// otherwise, just subimage upload it so that drivers can tell we are going to be changing
// it and don't try and do a texture compression
- qglTextureSubImage2D(texture, GL_TEXTURE_2D, 0, 0, 0, cols, rows, GL_RGBA, GL_UNSIGNED_BYTE, data);
+ qglTextureSubImage2DEXT(texture, GL_TEXTURE_2D, 0, 0, 0, cols, rows, GL_RGBA, GL_UNSIGNED_BYTE, data);
}
}
}
@@ -1241,7 +1241,7 @@ const void *RB_DrawSurfs( const void *data ) {
else if (tr.renderFbo == NULL && tr.renderDepthImage)
{
// If we're rendering directly to the screen, copy the depth to a texture
- qglCopyTextureImage2D(tr.renderDepthImage->texnum, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, 0, 0, glConfig.vidWidth, glConfig.vidHeight, 0);
+ qglCopyTextureImage2DEXT(tr.renderDepthImage->texnum, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, 0, 0, glConfig.vidWidth, glConfig.vidHeight, 0);
}
if (tr.hdrDepthFbo)
@@ -1452,7 +1452,7 @@ const void *RB_DrawSurfs( const void *data ) {
RB_DrawSun(0.2, tr.sunShader);
}
- if (r_drawSunRays->integer)
+ if (glRefConfig.framebufferObject && r_drawSunRays->integer)
{
FBO_t *oldFbo = glState.currentFBO;
FBO_Bind(tr.sunRaysFbo);
@@ -1489,7 +1489,7 @@ const void *RB_DrawSurfs( const void *data ) {
FBO_Bind(NULL);
if (cubemap && cubemap->image)
- qglGenerateTextureMipmap(cubemap->image->texnum, GL_TEXTURE_CUBE_MAP);
+ qglGenerateTextureMipmapEXT(cubemap->image->texnum, GL_TEXTURE_CUBE_MAP);
}
return (const void *)( cmd + 1 );
@@ -1747,14 +1747,14 @@ const void *RB_CapShadowMap(const void *data)
{
if (tr.shadowCubemaps[cmd->map])
{
- qglCopyTextureImage2D(tr.shadowCubemaps[cmd->map]->texnum, GL_TEXTURE_CUBE_MAP_POSITIVE_X + cmd->cubeSide, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - ( backEnd.refdef.y + PSHADOW_MAP_SIZE ), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0);
+ qglCopyTextureImage2DEXT(tr.shadowCubemaps[cmd->map]->texnum, GL_TEXTURE_CUBE_MAP_POSITIVE_X + cmd->cubeSide, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - ( backEnd.refdef.y + PSHADOW_MAP_SIZE ), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0);
}
}
else
{
if (tr.pshadowMaps[cmd->map])
{
- qglCopyTextureImage2D(tr.pshadowMaps[cmd->map]->texnum, GL_TEXTURE_2D, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - (backEnd.refdef.y + PSHADOW_MAP_SIZE), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0);
+ qglCopyTextureImage2DEXT(tr.pshadowMaps[cmd->map]->texnum, GL_TEXTURE_2D, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - (backEnd.refdef.y + PSHADOW_MAP_SIZE), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0);
}
}
}
diff --git a/MP/code/rend2/tr_bsp.c b/MP/code/rend2/tr_bsp.c
index 155ebc9..eef7f0f 100644
--- a/MP/code/rend2/tr_bsp.c
+++ b/MP/code/rend2/tr_bsp.c
@@ -3913,7 +3913,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/MP/code/rend2/tr_dsa.c b/MP/code/rend2/tr_dsa.c
index 4ea7699..f738a5d 100644
--- a/MP/code/rend2/tr_dsa.c
+++ b/MP/code/rend2/tr_dsa.c
@@ -43,7 +43,7 @@ void GL_BindNullTextures()
{
for (i = 0; i < NUM_TEXTURE_BUNDLES; i++)
{
- qglBindMultiTexture(GL_TEXTURE0_ARB + i, GL_TEXTURE_2D, 0);
+ qglBindMultiTextureEXT(GL_TEXTURE0_ARB + i, GL_TEXTURE_2D, 0);
glDsaState.textures[i] = 0;
}
}
@@ -71,12 +71,12 @@ int GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture)
if (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X && target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)
target = GL_TEXTURE_CUBE_MAP;
- qglBindMultiTexture(texunit, target, texture);
+ qglBindMultiTextureEXT(texunit, target, texture);
glDsaState.textures[tmu] = texture;
return 1;
}
-GLvoid APIENTRY GLDSA_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture)
+GLvoid APIENTRY GLDSA_BindMultiTextureEXT(GLenum texunit, GLenum target, GLuint texture)
{
if (glDsaState.texunit != texunit)
{
@@ -87,47 +87,47 @@ GLvoid APIENTRY GLDSA_BindMultiTexture(GLenum texunit, GLenum target, GLuint tex
qglBindTexture(target, texture);
}
-GLvoid APIENTRY GLDSA_TextureParameterf(GLuint texture, GLenum target, GLenum pname, GLfloat param)
+GLvoid APIENTRY GLDSA_TextureParameterfEXT(GLuint texture, GLenum target, GLenum pname, GLfloat param)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
qglTexParameterf(target, pname, param);
}
-GLvoid APIENTRY GLDSA_TextureParameteri(GLuint texture, GLenum target, GLenum pname, GLint param)
+GLvoid APIENTRY GLDSA_TextureParameteriEXT(GLuint texture, GLenum target, GLenum pname, GLint param)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
qglTexParameteri(target, pname, param);
}
-GLvoid APIENTRY GLDSA_TextureImage2D(GLuint texture, GLenum target, GLint level, GLint internalformat,
+GLvoid APIENTRY GLDSA_TextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLint internalformat,
GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
qglTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
}
-GLvoid APIENTRY GLDSA_TextureSubImage2D(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset,
+GLvoid APIENTRY GLDSA_TextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
qglTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
}
-GLvoid APIENTRY GLDSA_CopyTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat,
+GLvoid APIENTRY GLDSA_CopyTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat,
GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
qglCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
}
-GLvoid APIENTRY GLDSA_CompressedTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat,
+GLvoid APIENTRY GLDSA_CompressedTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat,
GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
qglCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
}
-GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLint level,
+GLvoid APIENTRY GLDSA_CompressedTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format,
GLsizei imageSize, const GLvoid *data)
{
@@ -135,7 +135,7 @@ GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target,
qglCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
}
-GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target)
+GLvoid APIENTRY GLDSA_GenerateTextureMipmapEXT(GLuint texture, GLenum target)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
qglGenerateMipmapEXT(target);
@@ -157,47 +157,47 @@ int GL_UseProgram(GLuint program)
return 1;
}
-GLvoid APIENTRY GLDSA_ProgramUniform1i(GLuint program, GLint location, GLint v0)
+GLvoid APIENTRY GLDSA_ProgramUniform1iEXT(GLuint program, GLint location, GLint v0)
{
GL_UseProgram(program);
qglUniform1i(location, v0);
}
-GLvoid APIENTRY GLDSA_ProgramUniform1f(GLuint program, GLint location, GLfloat v0)
+GLvoid APIENTRY GLDSA_ProgramUniform1fEXT(GLuint program, GLint location, GLfloat v0)
{
GL_UseProgram(program);
qglUniform1f(location, v0);
}
-GLvoid APIENTRY GLDSA_ProgramUniform2f(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform2fEXT(GLuint program, GLint location,
GLfloat v0, GLfloat v1)
{
GL_UseProgram(program);
qglUniform2f(location, v0, v1);
}
-GLvoid APIENTRY GLDSA_ProgramUniform3f(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform3fEXT(GLuint program, GLint location,
GLfloat v0, GLfloat v1, GLfloat v2)
{
GL_UseProgram(program);
qglUniform3f(location, v0, v1, v2);
}
-GLvoid APIENTRY GLDSA_ProgramUniform4f(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform4fEXT(GLuint program, GLint location,
GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
{
GL_UseProgram(program);
qglUniform4f(location, v0, v1, v2, v3);
}
-GLvoid APIENTRY GLDSA_ProgramUniform1fv(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform1fvEXT(GLuint program, GLint location,
GLsizei count, const GLfloat *value)
{
GL_UseProgram(program);
qglUniform1fv(location, count, value);
}
-GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fv(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fvEXT(GLuint program, GLint location,
GLsizei count, GLboolean transpose,
const GLfloat *value)
{
@@ -252,34 +252,34 @@ void GL_BindRenderbuffer(GLuint renderbuffer)
}
}
-GLvoid APIENTRY GLDSA_NamedRenderbufferStorage(GLuint renderbuffer,
+GLvoid APIENTRY GLDSA_NamedRenderbufferStorageEXT(GLuint renderbuffer,
GLenum internalformat, GLsizei width, GLsizei height)
{
GL_BindRenderbuffer(renderbuffer);
qglRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, internalformat, width, height);
}
-GLvoid APIENTRY GLDSA_NamedRenderbufferStorageMultisample(GLuint renderbuffer,
+GLvoid APIENTRY GLDSA_NamedRenderbufferStorageMultisampleEXT(GLuint renderbuffer,
GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
{
GL_BindRenderbuffer(renderbuffer);
qglRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, internalformat, width, height);
}
-GLenum APIENTRY GLDSA_CheckNamedFramebufferStatus(GLuint framebuffer, GLenum target)
+GLenum APIENTRY GLDSA_CheckNamedFramebufferStatusEXT(GLuint framebuffer, GLenum target)
{
GL_BindFramebuffer(target, framebuffer);
return qglCheckFramebufferStatusEXT(target);
}
-GLvoid APIENTRY GLDSA_NamedFramebufferTexture2D(GLuint framebuffer,
+GLvoid APIENTRY GLDSA_NamedFramebufferTexture2DEXT(GLuint framebuffer,
GLenum attachment, GLenum textarget, GLuint texture, GLint level)
{
GL_BindFramebuffer(GL_FRAMEBUFFER_EXT, framebuffer);
qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attachment, textarget, texture, level);
}
-GLvoid APIENTRY GLDSA_NamedFramebufferRenderbuffer(GLuint framebuffer,
+GLvoid APIENTRY GLDSA_NamedFramebufferRenderbufferEXT(GLuint framebuffer,
GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
{
GL_BindFramebuffer(GL_FRAMEBUFFER_EXT, framebuffer);
diff --git a/MP/code/rend2/tr_dsa.h b/MP/code/rend2/tr_dsa.h
index f57944d..ea9e0ad 100644
--- a/MP/code/rend2/tr_dsa.h
+++ b/MP/code/rend2/tr_dsa.h
@@ -26,37 +26,37 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
void GL_BindNullTextures(void);
int GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture);
-GLvoid APIENTRY GLDSA_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture);
-GLvoid APIENTRY GLDSA_TextureParameterf(GLuint texture, GLenum target, GLenum pname, GLfloat param);
-GLvoid APIENTRY GLDSA_TextureParameteri(GLuint texture, GLenum target, GLenum pname, GLint param);
-GLvoid APIENTRY GLDSA_TextureImage2D(GLuint texture, GLenum target, GLint level, GLint internalformat,
+GLvoid APIENTRY GLDSA_BindMultiTextureEXT(GLenum texunit, GLenum target, GLuint texture);
+GLvoid APIENTRY GLDSA_TextureParameterfEXT(GLuint texture, GLenum target, GLenum pname, GLfloat param);
+GLvoid APIENTRY GLDSA_TextureParameteriEXT(GLuint texture, GLenum target, GLenum pname, GLint param);
+GLvoid APIENTRY GLDSA_TextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLint internalformat,
GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
-GLvoid APIENTRY GLDSA_TextureSubImage2D(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset,
+GLvoid APIENTRY GLDSA_TextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
-GLvoid APIENTRY GLDSA_CopyTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat,
+GLvoid APIENTRY GLDSA_CopyTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat,
GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
-GLvoid APIENTRY GLDSA_CompressedTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat,
+GLvoid APIENTRY GLDSA_CompressedTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat,
GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
-GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLint level,
+GLvoid APIENTRY GLDSA_CompressedTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format,
GLsizei imageSize, const GLvoid *data);
-GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target);
+GLvoid APIENTRY GLDSA_GenerateTextureMipmapEXT(GLuint texture, GLenum target);
void GL_BindNullProgram(void);
int GL_UseProgram(GLuint program);
-GLvoid APIENTRY GLDSA_ProgramUniform1i(GLuint program, GLint location, GLint v0);
-GLvoid APIENTRY GLDSA_ProgramUniform1f(GLuint program, GLint location, GLfloat v0);
-GLvoid APIENTRY GLDSA_ProgramUniform2f(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform1iEXT(GLuint program, GLint location, GLint v0);
+GLvoid APIENTRY GLDSA_ProgramUniform1fEXT(GLuint program, GLint location, GLfloat v0);
+GLvoid APIENTRY GLDSA_ProgramUniform2fEXT(GLuint program, GLint location,
GLfloat v0, GLfloat v1);
-GLvoid APIENTRY GLDSA_ProgramUniform3f(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform3fEXT(GLuint program, GLint location,
GLfloat v0, GLfloat v1, GLfloat v2);
-GLvoid APIENTRY GLDSA_ProgramUniform4f(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform4fEXT(GLuint program, GLint location,
GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
-GLvoid APIENTRY GLDSA_ProgramUniform1fv(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform1fvEXT(GLuint program, GLint location,
GLsizei count, const GLfloat *value);
-GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fv(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fvEXT(GLuint program, GLint location,
GLsizei count, GLboolean transpose,
const GLfloat *value);
@@ -64,16 +64,16 @@ void GL_BindNullFramebuffers(void);
void GL_BindFramebuffer(GLenum target, GLuint framebuffer);
void GL_BindRenderbuffer(GLuint renderbuffer);
-GLvoid APIENTRY GLDSA_NamedRenderbufferStorage(GLuint renderbuffer,
+GLvoid APIENTRY GLDSA_NamedRenderbufferStorageEXT(GLuint renderbuffer,
GLenum internalformat, GLsizei width, GLsizei height);
-GLvoid APIENTRY GLDSA_NamedRenderbufferStorageMultisample(GLuint renderbuffer,
+GLvoid APIENTRY GLDSA_NamedRenderbufferStorageMultisampleEXT(GLuint renderbuffer,
GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
-GLenum APIENTRY GLDSA_CheckNamedFramebufferStatus(GLuint framebuffer, GLenum target);
-GLvoid APIENTRY GLDSA_NamedFramebufferTexture2D(GLuint framebuffer,
+GLenum APIENTRY GLDSA_CheckNamedFramebufferStatusEXT(GLuint framebuffer, GLenum target);
+GLvoid APIENTRY GLDSA_NamedFramebufferTexture2DEXT(GLuint framebuffer,
GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-GLvoid APIENTRY GLDSA_NamedFramebufferRenderbuffer(GLuint framebuffer,
+GLvoid APIENTRY GLDSA_NamedFramebufferRenderbufferEXT(GLuint framebuffer,
GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
diff --git a/MP/code/rend2/tr_extensions.c b/MP/code/rend2/tr_extensions.c
index 3aa6ecc..602310b 100644
--- a/MP/code/rend2/tr_extensions.c
+++ b/MP/code/rend2/tr_extensions.c
@@ -36,98 +36,13 @@ 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
-GLboolean (APIENTRY * qglIsRenderbufferEXT)(GLuint renderbuffer);
-void (APIENTRY * qglBindRenderbufferEXT)(GLenum target, GLuint renderbuffer);
-void (APIENTRY * qglDeleteRenderbuffersEXT)(GLsizei n, const GLuint *renderbuffers);
-void (APIENTRY * qglGenRenderbuffersEXT)(GLsizei n, GLuint *renderbuffers);
-
-void (APIENTRY * qglRenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
-
-void (APIENTRY * qglGetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint *params);
-
-GLboolean (APIENTRY * qglIsFramebufferEXT)(GLuint framebuffer);
-void (APIENTRY * qglBindFramebufferEXT)(GLenum target, GLuint framebuffer);
-void (APIENTRY * qglDeleteFramebuffersEXT)(GLsizei n, const GLuint *framebuffers);
-void (APIENTRY * qglGenFramebuffersEXT)(GLsizei n, GLuint *framebuffers);
-
-GLenum (APIENTRY * qglCheckFramebufferStatusEXT)(GLenum target);
-
-void (APIENTRY * qglFramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level);
-void (APIENTRY * qglFramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level);
-void (APIENTRY * qglFramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level, GLint zoffset);
-
-void (APIENTRY * qglFramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget,
- GLuint renderbuffer);
-
-void (APIENTRY * qglGetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint *params);
-
-void (APIENTRY * qglGenerateMipmapEXT)(GLenum target);
-
-// GL_EXT_framebuffer_blit
-void (APIENTRY * qglBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
- GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
- GLbitfield mask, GLenum filter);
-
-// GL_EXT_framebuffer_multisample
-void (APIENTRY * qglRenderbufferStorageMultisampleEXT)(GLenum target, GLsizei samples,
- GLenum internalformat, GLsizei width, GLsizei height);
-
-// GL_ARB_vertex_array_object
-void (APIENTRY * qglBindVertexArrayARB)(GLuint array);
-void (APIENTRY * qglDeleteVertexArraysARB)(GLsizei n, const GLuint *arrays);
-void (APIENTRY * qglGenVertexArraysARB)(GLsizei n, GLuint *arrays);
-GLboolean (APIENTRY * qglIsVertexArrayARB)(GLuint array);
-
-// GL_EXT_direct_state_access
-GLvoid (APIENTRY * qglBindMultiTexture)(GLenum texunit, GLenum target, GLuint texture);
-GLvoid (APIENTRY * qglTextureParameterf)(GLuint texture, GLenum target, GLenum pname, GLfloat param);
-GLvoid (APIENTRY * qglTextureParameteri)(GLuint texture, GLenum target, GLenum pname, GLint param);
-GLvoid (APIENTRY * qglTextureImage2D)(GLuint texture, GLenum target, GLint level, GLint internalformat,
- GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
-GLvoid (APIENTRY * qglTextureSubImage2D)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
-GLvoid (APIENTRY * qglCopyTextureImage2D)(GLuint texture, GLenum target, GLint level, GLenum internalformat,
- GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
-GLvoid (APIENTRY * qglCompressedTextureImage2D)(GLuint texture, GLenum target, GLint level, GLenum internalformat,
- GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
-GLvoid (APIENTRY * qglCompressedTextureSubImage2D)(GLuint texture, GLenum target, GLint level,
- GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format,
- GLsizei imageSize, const GLvoid *data);
-GLvoid (APIENTRY * qglGenerateTextureMipmap)(GLuint texture, GLenum target);
-
-GLvoid(APIENTRY * qglProgramUniform1i)(GLuint program, GLint location, GLint v0);
-GLvoid(APIENTRY * qglProgramUniform1f)(GLuint program, GLint location, GLfloat v0);
-GLvoid(APIENTRY * qglProgramUniform2f)(GLuint program, GLint location,
- GLfloat v0, GLfloat v1);
-GLvoid(APIENTRY * qglProgramUniform3f)(GLuint program, GLint location,
- GLfloat v0, GLfloat v1, GLfloat v2);
-GLvoid(APIENTRY * qglProgramUniform4f)(GLuint program, GLint location,
- GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
-GLvoid(APIENTRY * qglProgramUniform1fv)(GLuint program, GLint location,
- GLsizei count, const GLfloat *value);
-GLvoid(APIENTRY * qglProgramUniformMatrix4fv)(GLuint program, GLint location,
- GLsizei count, GLboolean transpose,
- const GLfloat *value);
-
-GLvoid(APIENTRY * qglNamedRenderbufferStorage)(GLuint renderbuffer,
- GLenum internalformat, GLsizei width, GLsizei height);
-
-GLvoid(APIENTRY * qglNamedRenderbufferStorageMultisample)(GLuint renderbuffer,
- GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
-
-GLenum(APIENTRY * qglCheckNamedFramebufferStatus)(GLuint framebuffer, GLenum target);
-GLvoid(APIENTRY * qglNamedFramebufferTexture2D)(GLuint framebuffer,
- GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-GLvoid(APIENTRY * qglNamedFramebufferRenderbuffer)(GLuint framebuffer,
- GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
-
-
static qboolean GLimp_HaveExtension(const char *ext)
{
const char *ptr = Q_stristr( (char *)qglGetString(GL_EXTENSIONS), ext );
@@ -142,18 +57,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 +81,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 +91,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 +105,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.memInfo = MI_ATI;
+
+ ri.Printf(PRINT_ALL, result[1], extension);
+ }
+ else
{
- glRefConfig.textureNonPowerOfTwo = qtrue;
+ 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 +157,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 +171,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 +185,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 +199,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 +220,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 +237,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 +255,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 +273,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 +286,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 +300,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 +320,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 +339,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 +349,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 +358,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/MP/code/rend2/tr_fbo.c b/MP/code/rend2/tr_fbo.c
index 9ba6344..41cfdd7 100644
--- a/MP/code/rend2/tr_fbo.c
+++ b/MP/code/rend2/tr_fbo.c
@@ -32,7 +32,7 @@ R_CheckFBO
*/
qboolean R_CheckFBO(const FBO_t * fbo)
{
- GLenum code = qglCheckNamedFramebufferStatus(fbo->frameBuffer, GL_FRAMEBUFFER_EXT);
+ GLenum code = qglCheckNamedFramebufferStatusEXT(fbo->frameBuffer, GL_FRAMEBUFFER_EXT);
if(code == GL_FRAMEBUFFER_COMPLETE_EXT)
return qtrue;
@@ -184,20 +184,20 @@ void FBO_CreateBuffer(FBO_t *fbo, int format, int index, int multisample)
qglGenRenderbuffersEXT(1, pRenderBuffer);
if (multisample && glRefConfig.framebufferMultisample)
- qglNamedRenderbufferStorageMultisample(*pRenderBuffer, multisample, format, fbo->width, fbo->height);
+ qglNamedRenderbufferStorageMultisampleEXT(*pRenderBuffer, multisample, format, fbo->width, fbo->height);
else
- qglNamedRenderbufferStorage(*pRenderBuffer, format, fbo->width, fbo->height);
+ qglNamedRenderbufferStorageEXT(*pRenderBuffer, format, fbo->width, fbo->height);
if(absent)
{
if (attachment == 0)
{
- qglNamedFramebufferRenderbuffer(fbo->frameBuffer, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer);
- qglNamedFramebufferRenderbuffer(fbo->frameBuffer, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer);
+ qglNamedFramebufferRenderbufferEXT(fbo->frameBuffer, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer);
+ qglNamedFramebufferRenderbufferEXT(fbo->frameBuffer, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer);
}
else
{
- qglNamedFramebufferRenderbuffer(fbo->frameBuffer, attachment, GL_RENDERBUFFER_EXT, *pRenderBuffer);
+ qglNamedFramebufferRenderbufferEXT(fbo->frameBuffer, attachment, GL_RENDERBUFFER_EXT, *pRenderBuffer);
}
}
}
@@ -216,7 +216,7 @@ void FBO_AttachImage(FBO_t *fbo, image_t *image, GLenum attachment, GLuint cubem
if (image->flags & IMGFLAG_CUBEMAP)
target = GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB + cubemapside;
- qglNamedFramebufferTexture2D(fbo->frameBuffer, attachment, target, image->texnum, 0);
+ qglNamedFramebufferTexture2DEXT(fbo->frameBuffer, attachment, target, image->texnum, 0);
index = attachment - GL_COLOR_ATTACHMENT0_EXT;
if (index >= 0 && index <= 15)
fbo->colorImage[index] = image;
diff --git a/MP/code/rend2/tr_glsl.c b/MP/code/rend2/tr_glsl.c
index 318853a..07e3d94 100644
--- a/MP/code/rend2/tr_glsl.c
+++ b/MP/code/rend2/tr_glsl.c
@@ -707,7 +707,7 @@ void GLSL_SetUniformInt(shaderProgram_t *program, int uniformNum, GLint value)
*compare = value;
- qglProgramUniform1i(program->program, uniforms[uniformNum], value);
+ qglProgramUniform1iEXT(program->program, uniforms[uniformNum], value);
}
void GLSL_SetUniformFloat(shaderProgram_t *program, int uniformNum, GLfloat value)
@@ -731,7 +731,7 @@ void GLSL_SetUniformFloat(shaderProgram_t *program, int uniformNum, GLfloat valu
*compare = value;
- qglProgramUniform1f(program->program, uniforms[uniformNum], value);
+ qglProgramUniform1fEXT(program->program, uniforms[uniformNum], value);
}
void GLSL_SetUniformVec2(shaderProgram_t *program, int uniformNum, const vec2_t v)
@@ -756,7 +756,7 @@ void GLSL_SetUniformVec2(shaderProgram_t *program, int uniformNum, const vec2_t
compare[0] = v[0];
compare[1] = v[1];
- qglProgramUniform2f(program->program, uniforms[uniformNum], v[0], v[1]);
+ qglProgramUniform2fEXT(program->program, uniforms[uniformNum], v[0], v[1]);
}
void GLSL_SetUniformVec3(shaderProgram_t *program, int uniformNum, const vec3_t v)
@@ -780,7 +780,7 @@ void GLSL_SetUniformVec3(shaderProgram_t *program, int uniformNum, const vec3_t
VectorCopy(v, compare);
- qglProgramUniform3f(program->program, uniforms[uniformNum], v[0], v[1], v[2]);
+ qglProgramUniform3fEXT(program->program, uniforms[uniformNum], v[0], v[1], v[2]);
}
void GLSL_SetUniformVec4(shaderProgram_t *program, int uniformNum, const vec4_t v)
@@ -804,7 +804,7 @@ void GLSL_SetUniformVec4(shaderProgram_t *program, int uniformNum, const vec4_t
VectorCopy4(v, compare);
- qglProgramUniform4f(program->program, uniforms[uniformNum], v[0], v[1], v[2], v[3]);
+ qglProgramUniform4fEXT(program->program, uniforms[uniformNum], v[0], v[1], v[2], v[3]);
}
void GLSL_SetUniformFloat5(shaderProgram_t *program, int uniformNum, const vec5_t v)
@@ -828,7 +828,7 @@ void GLSL_SetUniformFloat5(shaderProgram_t *program, int uniformNum, const vec5_
VectorCopy5(v, compare);
- qglProgramUniform1fv(program->program, uniforms[uniformNum], 5, v);
+ qglProgramUniform1fvEXT(program->program, uniforms[uniformNum], 5, v);
}
void GLSL_SetUniformMat4(shaderProgram_t *program, int uniformNum, const mat4_t matrix)
@@ -852,7 +852,7 @@ void GLSL_SetUniformMat4(shaderProgram_t *program, int uniformNum, const mat4_t
Mat4Copy(matrix, compare);
- qglProgramUniformMatrix4fv(program->program, uniforms[uniformNum], 1, GL_FALSE, matrix);
+ qglProgramUniformMatrix4fvEXT(program->program, uniforms[uniformNum], 1, GL_FALSE, matrix);
}
void GLSL_DeleteGPUShader(shaderProgram_t *program)
diff --git a/MP/code/rend2/tr_image.c b/MP/code/rend2/tr_image.c
index 644fe00..54bb371 100644
--- a/MP/code/rend2/tr_image.c
+++ b/MP/code/rend2/tr_image.c
@@ -133,8 +133,8 @@ void GL_TextureMode( const char *string ) {
for ( i = 0 ; i < tr.numImages ; i++ ) {
glt = tr.images[ i ];
if ( glt->flags & IMGFLAG_MIPMAP && !(glt->flags & IMGFLAG_CUBEMAP) ) {
- qglTextureParameterf(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min);
- qglTextureParameterf(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max);
+ qglTextureParameterfEXT(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min);
+ qglTextureParameterfEXT(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max);
}
}
}
@@ -2019,7 +2019,7 @@ static void RawImage_UploadToRgtc2Texture(GLuint texture, byte *data, int width,
}
}
- qglCompressedTextureImage2D(texture, GL_TEXTURE_2D, mip, GL_COMPRESSED_RG_RGTC2, width, height, 0, size, compressedData);
+ qglCompressedTextureImage2DEXT(texture, GL_TEXTURE_2D, mip, GL_COMPRESSED_RG_RGTC2, width, height, 0, size, compressedData);
ri.Hunk_FreeTempMemory(compressedData);
}
@@ -2098,7 +2098,7 @@ static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int
do
{
lastMip = (width == 1 && height == 1) || !mipmap;
- qglTextureImage2D(texture, target, miplevel, internalFormat, width, height, 0, dataFormat, dataType, NULL);
+ qglTextureImage2DEXT(texture, target, miplevel, internalFormat, width, height, 0, dataFormat, dataType, NULL);
width = MAX(1, width >> 1);
height = MAX(1, height >> 1);
@@ -2131,9 +2131,9 @@ static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int
if (compressed)
{
if (subtexture)
- qglCompressedTextureSubImage2D(texture, target, miplevel, x, y, width, height, picFormat, size, data);
+ qglCompressedTextureSubImage2DEXT(texture, target, miplevel, x, y, width, height, picFormat, size, data);
else
- qglCompressedTextureImage2D(texture, target, miplevel, picFormat, width, height, 0, size, data);
+ qglCompressedTextureImage2DEXT(texture, target, miplevel, picFormat, width, height, 0, size, data);
}
else
{
@@ -2143,9 +2143,9 @@ static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int
if (rgtc)
RawImage_UploadToRgtc2Texture(texture, data, width, height, miplevel);
else if (subtexture)
- qglTextureSubImage2D(texture, target, miplevel, x, y, width, height, dataFormat, dataType, data);
+ qglTextureSubImage2DEXT(texture, target, miplevel, x, y, width, height, dataFormat, dataType, data);
else
- qglTextureImage2D(texture, target, miplevel, internalFormat, width, height, 0, dataFormat, dataType, data);
+ qglTextureImage2DEXT(texture, target, miplevel, internalFormat, width, height, 0, dataFormat, dataType, data);
if (!lastMip && numMips < 2)
{
@@ -2285,19 +2285,19 @@ done:
if (mipmap)
{
if (textureFilterAnisotropic && !cubemap)
- qglTextureParameteri(image->texnum, textureTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT,
+ qglTextureParameteriEXT(image->texnum, textureTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT,
(GLint)Com_Clamp(1, maxAnisotropy, r_ext_max_anisotropy->integer));
- qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, gl_filter_min);
- qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, gl_filter_max);
+ qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, gl_filter_min);
+ qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, gl_filter_max);
}
else
{
if (textureFilterAnisotropic && !cubemap)
- qglTextureParameteri(image->texnum, textureTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1);
+ qglTextureParameteriEXT(image->texnum, textureTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1);
- qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
// Fix for sampling depth buffer on old nVidia cards
@@ -2308,9 +2308,9 @@ done:
case GL_DEPTH_COMPONENT16_ARB:
case GL_DEPTH_COMPONENT24_ARB:
case GL_DEPTH_COMPONENT32_ARB:
- qglTextureParameterf(image->texnum, textureTarget, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE);
- qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ qglTextureParameterfEXT(image->texnum, textureTarget, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE);
+ qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
break;
default:
break;
@@ -2371,14 +2371,14 @@ image_t *R_CreateImage2( const char *name, byte *pic, int width, int height, GLe
if (image->flags & IMGFLAG_CUBEMAP)
{
- qglTextureParameterf(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, glWrapClampMode);
- qglTextureParameterf(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, glWrapClampMode);
- qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, glWrapClampMode);
+ qglTextureParameterfEXT(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, glWrapClampMode);
+ qglTextureParameterfEXT(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, glWrapClampMode);
+ qglTextureParameteriEXT(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, glWrapClampMode);
}
else
{
- qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, glWrapClampMode);
- qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, glWrapClampMode);
+ qglTextureParameterfEXT(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, glWrapClampMode);
+ qglTextureParameterfEXT(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, glWrapClampMode);
}
hash = generateHashValue( name );
@@ -2936,11 +2936,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];
@@ -2995,8 +2992,8 @@ void R_CreateBuiltinImages( void ) {
for ( x = 0; x < 4; x++)
{
tr.sunShadowDepthImage[x] = R_CreateImage(va("*sunshadowdepth%i", x), NULL, r_shadowMapSize->integer, r_shadowMapSize->integer, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24_ARB);
- qglTextureParameterf(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
- qglTextureParameterf(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
+ qglTextureParameterfEXT(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
+ qglTextureParameterfEXT(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
}
tr.screenShadowImage = R_CreateImage("*screenShadow", NULL, width, height, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_RGBA8);
diff --git a/MP/code/rend2/tr_init.c b/MP/code/rend2/tr_init.c
index 84aba6c..fb8ac9f 100644
--- a/MP/code/rend2/tr_init.c
+++ b/MP/code/rend2/tr_init.c
@@ -1044,7 +1044,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/MP/code/rend2/tr_local.h b/MP/code/rend2/tr_local.h
index af96bba..ecd2fd4 100644
--- a/MP/code/rend2/tr_local.h
+++ b/MP/code/rend2/tr_local.h
@@ -1534,7 +1534,6 @@ typedef struct {
qboolean textureNonPowerOfTwo;
qboolean textureFloat;
qboolean halfFloatPixel;
- qboolean packedDepthStencil;
textureCompressionRef_t textureCompression;
qboolean swizzleNormalmap;
diff --git a/MP/code/rend2/tr_shade.c b/MP/code/rend2/tr_shade.c
index 0b93ddd..c364638 100644
--- a/MP/code/rend2/tr_shade.c
+++ b/MP/code/rend2/tr_shade.c
@@ -1582,7 +1582,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)
{
@@ -1695,7 +1697,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/MP/code/rend2/tr_vbo.c b/MP/code/rend2/tr_vbo.c
index 61ede4e..b1ff3d6 100644
--- a/MP/code/rend2/tr_vbo.c
+++ b/MP/code/rend2/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)
{
diff --git a/SP/code/rend2/qgl.h b/SP/code/rend2/qgl.h
index b47372e..aa10c6f 100644
--- a/SP/code/rend2/qgl.h
+++ b/SP/code/rend2/qgl.h
@@ -516,14 +516,6 @@ extern void ( APIENTRY * qglPNTrianglesfATI )( GLenum pname, GLfloat param );
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
@@ -573,27 +565,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
@@ -650,19 +633,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
@@ -673,8 +646,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
@@ -683,31 +656,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
@@ -735,89 +683,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, BindMultiTextureEXT, GLenum texunit, GLenum target, GLuint texture) \
+ GLE(GLvoid, TextureParameterfEXT, GLuint texture, GLenum target, GLenum pname, GLfloat param) \
+ GLE(GLvoid, TextureParameteriEXT, GLuint texture, GLenum target, GLenum pname, GLint param) \
+ GLE(GLvoid, TextureImage2DEXT, GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) \
+ GLE(GLvoid, TextureSubImage2DEXT, GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) \
+ GLE(GLvoid, CopyTextureImage2DEXT, GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) \
+ GLE(GLvoid, CompressedTextureImage2DEXT, GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) \
+ GLE(GLvoid, CompressedTextureSubImage2DEXT, GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) \
+ GLE(GLvoid, GenerateTextureMipmapEXT, GLuint texture, GLenum target) \
+ GLE(GLvoid, ProgramUniform1iEXT, GLuint program, GLint location, GLint v0) \
+ GLE(GLvoid, ProgramUniform1fEXT, GLuint program, GLint location, GLfloat v0) \
+ GLE(GLvoid, ProgramUniform2fEXT, GLuint program, GLint location, GLfloat v0, GLfloat v1) \
+ GLE(GLvoid, ProgramUniform3fEXT, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) \
+ GLE(GLvoid, ProgramUniform4fEXT, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) \
+ GLE(GLvoid, ProgramUniform1fvEXT, GLuint program, GLint location, GLsizei count, const GLfloat *value) \
+ GLE(GLvoid, ProgramUniformMatrix4fvEXT, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) \
+ GLE(GLvoid, NamedRenderbufferStorageEXT, GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height) \
+ GLE(GLvoid, NamedRenderbufferStorageMultisampleEXT, GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) \
+ GLE(GLenum, CheckNamedFramebufferStatusEXT, GLuint framebuffer, GLenum target) \
+ GLE(GLvoid, NamedFramebufferTexture2DEXT, GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) \
+ GLE(GLvoid, NamedFramebufferRenderbufferEXT, 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 // __QGL_H__
diff --git a/SP/code/rend2/tr_backend.c b/SP/code/rend2/tr_backend.c
index e5b7ca3..ae3a742 100644
--- a/SP/code/rend2/tr_backend.c
+++ b/SP/code/rend2/tr_backend.c
@@ -1235,16 +1235,16 @@ void RE_UploadCinematic( int w, int h, int cols, int rows, const byte *data, int
if ( cols != tr.scratchImage[client]->width || rows != tr.scratchImage[client]->height ) {
tr.scratchImage[client]->width = tr.scratchImage[client]->uploadWidth = cols;
tr.scratchImage[client]->height = tr.scratchImage[client]->uploadHeight = rows;
- qglTextureImage2D(texture, GL_TEXTURE_2D, 0, GL_RGB8, cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
- qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
- qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ qglTextureImage2DEXT(texture, GL_TEXTURE_2D, 0, GL_RGB8, cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
+ qglTextureParameterfEXT(texture, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ qglTextureParameterfEXT(texture, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
+ qglTextureParameterfEXT(texture, GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ qglTextureParameterfEXT(texture, GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
} else {
if ( dirty ) {
// otherwise, just subimage upload it so that drivers can tell we are going to be changing
// it and don't try and do a texture compression
- qglTextureSubImage2D(texture, GL_TEXTURE_2D, 0, 0, 0, cols, rows, GL_RGBA, GL_UNSIGNED_BYTE, data);
+ qglTextureSubImage2DEXT(texture, GL_TEXTURE_2D, 0, 0, 0, cols, rows, GL_RGBA, GL_UNSIGNED_BYTE, data);
}
}
}
@@ -1493,7 +1493,7 @@ const void *RB_DrawSurfs( const void *data ) {
else if (tr.renderFbo == NULL && tr.renderDepthImage)
{
// If we're rendering directly to the screen, copy the depth to a texture
- qglCopyTextureImage2D(tr.renderDepthImage->texnum, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, 0, 0, glConfig.vidWidth, glConfig.vidHeight, 0);
+ qglCopyTextureImage2DEXT(tr.renderDepthImage->texnum, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, 0, 0, glConfig.vidWidth, glConfig.vidHeight, 0);
}
if (tr.hdrDepthFbo)
@@ -1704,7 +1704,7 @@ const void *RB_DrawSurfs( const void *data ) {
RB_DrawSun(0.2, tr.sunShader);
}
- if (r_drawSunRays->integer)
+ if (glRefConfig.framebufferObject && r_drawSunRays->integer)
{
FBO_t *oldFbo = glState.currentFBO;
FBO_Bind(tr.sunRaysFbo);
@@ -1741,7 +1741,7 @@ const void *RB_DrawSurfs( const void *data ) {
FBO_Bind(NULL);
if (cubemap && cubemap->image)
- qglGenerateTextureMipmap(cubemap->image->texnum, GL_TEXTURE_CUBE_MAP);
+ qglGenerateTextureMipmapEXT(cubemap->image->texnum, GL_TEXTURE_CUBE_MAP);
}
return (const void *)( cmd + 1 );
@@ -1999,14 +1999,14 @@ const void *RB_CapShadowMap(const void *data)
{
if (tr.shadowCubemaps[cmd->map])
{
- qglCopyTextureImage2D(tr.shadowCubemaps[cmd->map]->texnum, GL_TEXTURE_CUBE_MAP_POSITIVE_X + cmd->cubeSide, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - ( backEnd.refdef.y + PSHADOW_MAP_SIZE ), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0);
+ qglCopyTextureImage2DEXT(tr.shadowCubemaps[cmd->map]->texnum, GL_TEXTURE_CUBE_MAP_POSITIVE_X + cmd->cubeSide, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - ( backEnd.refdef.y + PSHADOW_MAP_SIZE ), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0);
}
}
else
{
if (tr.pshadowMaps[cmd->map])
{
- qglCopyTextureImage2D(tr.pshadowMaps[cmd->map]->texnum, GL_TEXTURE_2D, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - (backEnd.refdef.y + PSHADOW_MAP_SIZE), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0);
+ qglCopyTextureImage2DEXT(tr.pshadowMaps[cmd->map]->texnum, GL_TEXTURE_2D, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - (backEnd.refdef.y + PSHADOW_MAP_SIZE), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0);
}
}
}
diff --git a/SP/code/rend2/tr_bsp.c b/SP/code/rend2/tr_bsp.c
index 5289f3d..06e4e8e 100644
--- a/SP/code/rend2/tr_bsp.c
+++ b/SP/code/rend2/tr_bsp.c
@@ -3902,7 +3902,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/SP/code/rend2/tr_dsa.c b/SP/code/rend2/tr_dsa.c
index 4ea7699..f738a5d 100644
--- a/SP/code/rend2/tr_dsa.c
+++ b/SP/code/rend2/tr_dsa.c
@@ -43,7 +43,7 @@ void GL_BindNullTextures()
{
for (i = 0; i < NUM_TEXTURE_BUNDLES; i++)
{
- qglBindMultiTexture(GL_TEXTURE0_ARB + i, GL_TEXTURE_2D, 0);
+ qglBindMultiTextureEXT(GL_TEXTURE0_ARB + i, GL_TEXTURE_2D, 0);
glDsaState.textures[i] = 0;
}
}
@@ -71,12 +71,12 @@ int GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture)
if (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X && target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)
target = GL_TEXTURE_CUBE_MAP;
- qglBindMultiTexture(texunit, target, texture);
+ qglBindMultiTextureEXT(texunit, target, texture);
glDsaState.textures[tmu] = texture;
return 1;
}
-GLvoid APIENTRY GLDSA_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture)
+GLvoid APIENTRY GLDSA_BindMultiTextureEXT(GLenum texunit, GLenum target, GLuint texture)
{
if (glDsaState.texunit != texunit)
{
@@ -87,47 +87,47 @@ GLvoid APIENTRY GLDSA_BindMultiTexture(GLenum texunit, GLenum target, GLuint tex
qglBindTexture(target, texture);
}
-GLvoid APIENTRY GLDSA_TextureParameterf(GLuint texture, GLenum target, GLenum pname, GLfloat param)
+GLvoid APIENTRY GLDSA_TextureParameterfEXT(GLuint texture, GLenum target, GLenum pname, GLfloat param)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
qglTexParameterf(target, pname, param);
}
-GLvoid APIENTRY GLDSA_TextureParameteri(GLuint texture, GLenum target, GLenum pname, GLint param)
+GLvoid APIENTRY GLDSA_TextureParameteriEXT(GLuint texture, GLenum target, GLenum pname, GLint param)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
qglTexParameteri(target, pname, param);
}
-GLvoid APIENTRY GLDSA_TextureImage2D(GLuint texture, GLenum target, GLint level, GLint internalformat,
+GLvoid APIENTRY GLDSA_TextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLint internalformat,
GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
qglTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
}
-GLvoid APIENTRY GLDSA_TextureSubImage2D(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset,
+GLvoid APIENTRY GLDSA_TextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
qglTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
}
-GLvoid APIENTRY GLDSA_CopyTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat,
+GLvoid APIENTRY GLDSA_CopyTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat,
GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
qglCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
}
-GLvoid APIENTRY GLDSA_CompressedTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat,
+GLvoid APIENTRY GLDSA_CompressedTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat,
GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
qglCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
}
-GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLint level,
+GLvoid APIENTRY GLDSA_CompressedTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format,
GLsizei imageSize, const GLvoid *data)
{
@@ -135,7 +135,7 @@ GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target,
qglCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
}
-GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target)
+GLvoid APIENTRY GLDSA_GenerateTextureMipmapEXT(GLuint texture, GLenum target)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
qglGenerateMipmapEXT(target);
@@ -157,47 +157,47 @@ int GL_UseProgram(GLuint program)
return 1;
}
-GLvoid APIENTRY GLDSA_ProgramUniform1i(GLuint program, GLint location, GLint v0)
+GLvoid APIENTRY GLDSA_ProgramUniform1iEXT(GLuint program, GLint location, GLint v0)
{
GL_UseProgram(program);
qglUniform1i(location, v0);
}
-GLvoid APIENTRY GLDSA_ProgramUniform1f(GLuint program, GLint location, GLfloat v0)
+GLvoid APIENTRY GLDSA_ProgramUniform1fEXT(GLuint program, GLint location, GLfloat v0)
{
GL_UseProgram(program);
qglUniform1f(location, v0);
}
-GLvoid APIENTRY GLDSA_ProgramUniform2f(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform2fEXT(GLuint program, GLint location,
GLfloat v0, GLfloat v1)
{
GL_UseProgram(program);
qglUniform2f(location, v0, v1);
}
-GLvoid APIENTRY GLDSA_ProgramUniform3f(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform3fEXT(GLuint program, GLint location,
GLfloat v0, GLfloat v1, GLfloat v2)
{
GL_UseProgram(program);
qglUniform3f(location, v0, v1, v2);
}
-GLvoid APIENTRY GLDSA_ProgramUniform4f(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform4fEXT(GLuint program, GLint location,
GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
{
GL_UseProgram(program);
qglUniform4f(location, v0, v1, v2, v3);
}
-GLvoid APIENTRY GLDSA_ProgramUniform1fv(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform1fvEXT(GLuint program, GLint location,
GLsizei count, const GLfloat *value)
{
GL_UseProgram(program);
qglUniform1fv(location, count, value);
}
-GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fv(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fvEXT(GLuint program, GLint location,
GLsizei count, GLboolean transpose,
const GLfloat *value)
{
@@ -252,34 +252,34 @@ void GL_BindRenderbuffer(GLuint renderbuffer)
}
}
-GLvoid APIENTRY GLDSA_NamedRenderbufferStorage(GLuint renderbuffer,
+GLvoid APIENTRY GLDSA_NamedRenderbufferStorageEXT(GLuint renderbuffer,
GLenum internalformat, GLsizei width, GLsizei height)
{
GL_BindRenderbuffer(renderbuffer);
qglRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, internalformat, width, height);
}
-GLvoid APIENTRY GLDSA_NamedRenderbufferStorageMultisample(GLuint renderbuffer,
+GLvoid APIENTRY GLDSA_NamedRenderbufferStorageMultisampleEXT(GLuint renderbuffer,
GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
{
GL_BindRenderbuffer(renderbuffer);
qglRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, internalformat, width, height);
}
-GLenum APIENTRY GLDSA_CheckNamedFramebufferStatus(GLuint framebuffer, GLenum target)
+GLenum APIENTRY GLDSA_CheckNamedFramebufferStatusEXT(GLuint framebuffer, GLenum target)
{
GL_BindFramebuffer(target, framebuffer);
return qglCheckFramebufferStatusEXT(target);
}
-GLvoid APIENTRY GLDSA_NamedFramebufferTexture2D(GLuint framebuffer,
+GLvoid APIENTRY GLDSA_NamedFramebufferTexture2DEXT(GLuint framebuffer,
GLenum attachment, GLenum textarget, GLuint texture, GLint level)
{
GL_BindFramebuffer(GL_FRAMEBUFFER_EXT, framebuffer);
qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attachment, textarget, texture, level);
}
-GLvoid APIENTRY GLDSA_NamedFramebufferRenderbuffer(GLuint framebuffer,
+GLvoid APIENTRY GLDSA_NamedFramebufferRenderbufferEXT(GLuint framebuffer,
GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
{
GL_BindFramebuffer(GL_FRAMEBUFFER_EXT, framebuffer);
diff --git a/SP/code/rend2/tr_dsa.h b/SP/code/rend2/tr_dsa.h
index f57944d..ea9e0ad 100644
--- a/SP/code/rend2/tr_dsa.h
+++ b/SP/code/rend2/tr_dsa.h
@@ -26,37 +26,37 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
void GL_BindNullTextures(void);
int GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture);
-GLvoid APIENTRY GLDSA_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture);
-GLvoid APIENTRY GLDSA_TextureParameterf(GLuint texture, GLenum target, GLenum pname, GLfloat param);
-GLvoid APIENTRY GLDSA_TextureParameteri(GLuint texture, GLenum target, GLenum pname, GLint param);
-GLvoid APIENTRY GLDSA_TextureImage2D(GLuint texture, GLenum target, GLint level, GLint internalformat,
+GLvoid APIENTRY GLDSA_BindMultiTextureEXT(GLenum texunit, GLenum target, GLuint texture);
+GLvoid APIENTRY GLDSA_TextureParameterfEXT(GLuint texture, GLenum target, GLenum pname, GLfloat param);
+GLvoid APIENTRY GLDSA_TextureParameteriEXT(GLuint texture, GLenum target, GLenum pname, GLint param);
+GLvoid APIENTRY GLDSA_TextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLint internalformat,
GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
-GLvoid APIENTRY GLDSA_TextureSubImage2D(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset,
+GLvoid APIENTRY GLDSA_TextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
-GLvoid APIENTRY GLDSA_CopyTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat,
+GLvoid APIENTRY GLDSA_CopyTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat,
GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
-GLvoid APIENTRY GLDSA_CompressedTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat,
+GLvoid APIENTRY GLDSA_CompressedTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat,
GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
-GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLint level,
+GLvoid APIENTRY GLDSA_CompressedTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level,
GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format,
GLsizei imageSize, const GLvoid *data);
-GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target);
+GLvoid APIENTRY GLDSA_GenerateTextureMipmapEXT(GLuint texture, GLenum target);
void GL_BindNullProgram(void);
int GL_UseProgram(GLuint program);
-GLvoid APIENTRY GLDSA_ProgramUniform1i(GLuint program, GLint location, GLint v0);
-GLvoid APIENTRY GLDSA_ProgramUniform1f(GLuint program, GLint location, GLfloat v0);
-GLvoid APIENTRY GLDSA_ProgramUniform2f(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform1iEXT(GLuint program, GLint location, GLint v0);
+GLvoid APIENTRY GLDSA_ProgramUniform1fEXT(GLuint program, GLint location, GLfloat v0);
+GLvoid APIENTRY GLDSA_ProgramUniform2fEXT(GLuint program, GLint location,
GLfloat v0, GLfloat v1);
-GLvoid APIENTRY GLDSA_ProgramUniform3f(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform3fEXT(GLuint program, GLint location,
GLfloat v0, GLfloat v1, GLfloat v2);
-GLvoid APIENTRY GLDSA_ProgramUniform4f(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform4fEXT(GLuint program, GLint location,
GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
-GLvoid APIENTRY GLDSA_ProgramUniform1fv(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniform1fvEXT(GLuint program, GLint location,
GLsizei count, const GLfloat *value);
-GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fv(GLuint program, GLint location,
+GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fvEXT(GLuint program, GLint location,
GLsizei count, GLboolean transpose,
const GLfloat *value);
@@ -64,16 +64,16 @@ void GL_BindNullFramebuffers(void);
void GL_BindFramebuffer(GLenum target, GLuint framebuffer);
void GL_BindRenderbuffer(GLuint renderbuffer);
-GLvoid APIENTRY GLDSA_NamedRenderbufferStorage(GLuint renderbuffer,
+GLvoid APIENTRY GLDSA_NamedRenderbufferStorageEXT(GLuint renderbuffer,
GLenum internalformat, GLsizei width, GLsizei height);
-GLvoid APIENTRY GLDSA_NamedRenderbufferStorageMultisample(GLuint renderbuffer,
+GLvoid APIENTRY GLDSA_NamedRenderbufferStorageMultisampleEXT(GLuint renderbuffer,
GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
-GLenum APIENTRY GLDSA_CheckNamedFramebufferStatus(GLuint framebuffer, GLenum target);
-GLvoid APIENTRY GLDSA_NamedFramebufferTexture2D(GLuint framebuffer,
+GLenum APIENTRY GLDSA_CheckNamedFramebufferStatusEXT(GLuint framebuffer, GLenum target);
+GLvoid APIENTRY GLDSA_NamedFramebufferTexture2DEXT(GLuint framebuffer,
GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-GLvoid APIENTRY GLDSA_NamedFramebufferRenderbuffer(GLuint framebuffer,
+GLvoid APIENTRY GLDSA_NamedFramebufferRenderbufferEXT(GLuint framebuffer,
GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
diff --git a/SP/code/rend2/tr_extensions.c b/SP/code/rend2/tr_extensions.c
index 3aa6ecc..602310b 100644
--- a/SP/code/rend2/tr_extensions.c
+++ b/SP/code/rend2/tr_extensions.c
@@ -36,98 +36,13 @@ 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
-GLboolean (APIENTRY * qglIsRenderbufferEXT)(GLuint renderbuffer);
-void (APIENTRY * qglBindRenderbufferEXT)(GLenum target, GLuint renderbuffer);
-void (APIENTRY * qglDeleteRenderbuffersEXT)(GLsizei n, const GLuint *renderbuffers);
-void (APIENTRY * qglGenRenderbuffersEXT)(GLsizei n, GLuint *renderbuffers);
-
-void (APIENTRY * qglRenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
-
-void (APIENTRY * qglGetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint *params);
-
-GLboolean (APIENTRY * qglIsFramebufferEXT)(GLuint framebuffer);
-void (APIENTRY * qglBindFramebufferEXT)(GLenum target, GLuint framebuffer);
-void (APIENTRY * qglDeleteFramebuffersEXT)(GLsizei n, const GLuint *framebuffers);
-void (APIENTRY * qglGenFramebuffersEXT)(GLsizei n, GLuint *framebuffers);
-
-GLenum (APIENTRY * qglCheckFramebufferStatusEXT)(GLenum target);
-
-void (APIENTRY * qglFramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level);
-void (APIENTRY * qglFramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level);
-void (APIENTRY * qglFramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level, GLint zoffset);
-
-void (APIENTRY * qglFramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget,
- GLuint renderbuffer);
-
-void (APIENTRY * qglGetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint *params);
-
-void (APIENTRY * qglGenerateMipmapEXT)(GLenum target);
-
-// GL_EXT_framebuffer_blit
-void (APIENTRY * qglBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
- GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
- GLbitfield mask, GLenum filter);
-
-// GL_EXT_framebuffer_multisample
-void (APIENTRY * qglRenderbufferStorageMultisampleEXT)(GLenum target, GLsizei samples,
- GLenum internalformat, GLsizei width, GLsizei height);
-
-// GL_ARB_vertex_array_object
-void (APIENTRY * qglBindVertexArrayARB)(GLuint array);
-void (APIENTRY * qglDeleteVertexArraysARB)(GLsizei n, const GLuint *arrays);
-void (APIENTRY * qglGenVertexArraysARB)(GLsizei n, GLuint *arrays);
-GLboolean (APIENTRY * qglIsVertexArrayARB)(GLuint array);
-
-// GL_EXT_direct_state_access
-GLvoid (APIENTRY * qglBindMultiTexture)(GLenum texunit, GLenum target, GLuint texture);
-GLvoid (APIENTRY * qglTextureParameterf)(GLuint texture, GLenum target, GLenum pname, GLfloat param);
-GLvoid (APIENTRY * qglTextureParameteri)(GLuint texture, GLenum target, GLenum pname, GLint param);
-GLvoid (APIENTRY * qglTextureImage2D)(GLuint texture, GLenum target, GLint level, GLint internalformat,
- GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
-GLvoid (APIENTRY * qglTextureSubImage2D)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
-GLvoid (APIENTRY * qglCopyTextureImage2D)(GLuint texture, GLenum target, GLint level, GLenum internalformat,
- GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
-GLvoid (APIENTRY * qglCompressedTextureImage2D)(GLuint texture, GLenum target, GLint level, GLenum internalformat,
- GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
-GLvoid (APIENTRY * qglCompressedTextureSubImage2D)(GLuint texture, GLenum target, GLint level,
- GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format,
- GLsizei imageSize, const GLvoid *data);
-GLvoid (APIENTRY * qglGenerateTextureMipmap)(GLuint texture, GLenum target);
-
-GLvoid(APIENTRY * qglProgramUniform1i)(GLuint program, GLint location, GLint v0);
-GLvoid(APIENTRY * qglProgramUniform1f)(GLuint program, GLint location, GLfloat v0);
-GLvoid(APIENTRY * qglProgramUniform2f)(GLuint program, GLint location,
- GLfloat v0, GLfloat v1);
-GLvoid(APIENTRY * qglProgramUniform3f)(GLuint program, GLint location,
- GLfloat v0, GLfloat v1, GLfloat v2);
-GLvoid(APIENTRY * qglProgramUniform4f)(GLuint program, GLint location,
- GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
-GLvoid(APIENTRY * qglProgramUniform1fv)(GLuint program, GLint location,
- GLsizei count, const GLfloat *value);
-GLvoid(APIENTRY * qglProgramUniformMatrix4fv)(GLuint program, GLint location,
- GLsizei count, GLboolean transpose,
- const GLfloat *value);
-
-GLvoid(APIENTRY * qglNamedRenderbufferStorage)(GLuint renderbuffer,
- GLenum internalformat, GLsizei width, GLsizei height);
-
-GLvoid(APIENTRY * qglNamedRenderbufferStorageMultisample)(GLuint renderbuffer,
- GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
-
-GLenum(APIENTRY * qglCheckNamedFramebufferStatus)(GLuint framebuffer, GLenum target);
-GLvoid(APIENTRY * qglNamedFramebufferTexture2D)(GLuint framebuffer,
- GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-GLvoid(APIENTRY * qglNamedFramebufferRenderbuffer)(GLuint framebuffer,
- GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
-
-
static qboolean GLimp_HaveExtension(const char *ext)
{
const char *ptr = Q_stristr( (char *)qglGetString(GL_EXTENSIONS), ext );
@@ -142,18 +57,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 +81,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 +91,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 +105,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.memInfo = MI_ATI;
+
+ ri.Printf(PRINT_ALL, result[1], extension);
+ }
+ else
{
- glRefConfig.textureNonPowerOfTwo = qtrue;
+ 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 +157,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 +171,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 +185,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 +199,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 +220,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 +237,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 +255,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 +273,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 +286,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 +300,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 +320,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 +339,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 +349,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 +358,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/SP/code/rend2/tr_fbo.c b/SP/code/rend2/tr_fbo.c
index 9ba6344..41cfdd7 100644
--- a/SP/code/rend2/tr_fbo.c
+++ b/SP/code/rend2/tr_fbo.c
@@ -32,7 +32,7 @@ R_CheckFBO
*/
qboolean R_CheckFBO(const FBO_t * fbo)
{
- GLenum code = qglCheckNamedFramebufferStatus(fbo->frameBuffer, GL_FRAMEBUFFER_EXT);
+ GLenum code = qglCheckNamedFramebufferStatusEXT(fbo->frameBuffer, GL_FRAMEBUFFER_EXT);
if(code == GL_FRAMEBUFFER_COMPLETE_EXT)
return qtrue;
@@ -184,20 +184,20 @@ void FBO_CreateBuffer(FBO_t *fbo, int format, int index, int multisample)
qglGenRenderbuffersEXT(1, pRenderBuffer);
if (multisample && glRefConfig.framebufferMultisample)
- qglNamedRenderbufferStorageMultisample(*pRenderBuffer, multisample, format, fbo->width, fbo->height);
+ qglNamedRenderbufferStorageMultisampleEXT(*pRenderBuffer, multisample, format, fbo->width, fbo->height);
else
- qglNamedRenderbufferStorage(*pRenderBuffer, format, fbo->width, fbo->height);
+ qglNamedRenderbufferStorageEXT(*pRenderBuffer, format, fbo->width, fbo->height);
if(absent)
{
if (attachment == 0)
{
- qglNamedFramebufferRenderbuffer(fbo->frameBuffer, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer);
- qglNamedFramebufferRenderbuffer(fbo->frameBuffer, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer);
+ qglNamedFramebufferRenderbufferEXT(fbo->frameBuffer, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer);
+ qglNamedFramebufferRenderbufferEXT(fbo->frameBuffer, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer);
}
else
{
- qglNamedFramebufferRenderbuffer(fbo->frameBuffer, attachment, GL_RENDERBUFFER_EXT, *pRenderBuffer);
+ qglNamedFramebufferRenderbufferEXT(fbo->frameBuffer, attachment, GL_RENDERBUFFER_EXT, *pRenderBuffer);
}
}
}
@@ -216,7 +216,7 @@ void FBO_AttachImage(FBO_t *fbo, image_t *image, GLenum attachment, GLuint cubem
if (image->flags & IMGFLAG_CUBEMAP)
target = GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB + cubemapside;
- qglNamedFramebufferTexture2D(fbo->frameBuffer, attachment, target, image->texnum, 0);
+ qglNamedFramebufferTexture2DEXT(fbo->frameBuffer, attachment, target, image->texnum, 0);
index = attachment - GL_COLOR_ATTACHMENT0_EXT;
if (index >= 0 && index <= 15)
fbo->colorImage[index] = image;
diff --git a/SP/code/rend2/tr_glsl.c b/SP/code/rend2/tr_glsl.c
index 318853a..07e3d94 100644
--- a/SP/code/rend2/tr_glsl.c
+++ b/SP/code/rend2/tr_glsl.c
@@ -707,7 +707,7 @@ void GLSL_SetUniformInt(shaderProgram_t *program, int uniformNum, GLint value)
*compare = value;
- qglProgramUniform1i(program->program, uniforms[uniformNum], value);
+ qglProgramUniform1iEXT(program->program, uniforms[uniformNum], value);
}
void GLSL_SetUniformFloat(shaderProgram_t *program, int uniformNum, GLfloat value)
@@ -731,7 +731,7 @@ void GLSL_SetUniformFloat(shaderProgram_t *program, int uniformNum, GLfloat valu
*compare = value;
- qglProgramUniform1f(program->program, uniforms[uniformNum], value);
+ qglProgramUniform1fEXT(program->program, uniforms[uniformNum], value);
}
void GLSL_SetUniformVec2(shaderProgram_t *program, int uniformNum, const vec2_t v)
@@ -756,7 +756,7 @@ void GLSL_SetUniformVec2(shaderProgram_t *program, int uniformNum, const vec2_t
compare[0] = v[0];
compare[1] = v[1];
- qglProgramUniform2f(program->program, uniforms[uniformNum], v[0], v[1]);
+ qglProgramUniform2fEXT(program->program, uniforms[uniformNum], v[0], v[1]);
}
void GLSL_SetUniformVec3(shaderProgram_t *program, int uniformNum, const vec3_t v)
@@ -780,7 +780,7 @@ void GLSL_SetUniformVec3(shaderProgram_t *program, int uniformNum, const vec3_t
VectorCopy(v, compare);
- qglProgramUniform3f(program->program, uniforms[uniformNum], v[0], v[1], v[2]);
+ qglProgramUniform3fEXT(program->program, uniforms[uniformNum], v[0], v[1], v[2]);
}
void GLSL_SetUniformVec4(shaderProgram_t *program, int uniformNum, const vec4_t v)
@@ -804,7 +804,7 @@ void GLSL_SetUniformVec4(shaderProgram_t *program, int uniformNum, const vec4_t
VectorCopy4(v, compare);
- qglProgramUniform4f(program->program, uniforms[uniformNum], v[0], v[1], v[2], v[3]);
+ qglProgramUniform4fEXT(program->program, uniforms[uniformNum], v[0], v[1], v[2], v[3]);
}
void GLSL_SetUniformFloat5(shaderProgram_t *program, int uniformNum, const vec5_t v)
@@ -828,7 +828,7 @@ void GLSL_SetUniformFloat5(shaderProgram_t *program, int uniformNum, const vec5_
VectorCopy5(v, compare);
- qglProgramUniform1fv(program->program, uniforms[uniformNum], 5, v);
+ qglProgramUniform1fvEXT(program->program, uniforms[uniformNum], 5, v);
}
void GLSL_SetUniformMat4(shaderProgram_t *program, int uniformNum, const mat4_t matrix)
@@ -852,7 +852,7 @@ void GLSL_SetUniformMat4(shaderProgram_t *program, int uniformNum, const mat4_t
Mat4Copy(matrix, compare);
- qglProgramUniformMatrix4fv(program->program, uniforms[uniformNum], 1, GL_FALSE, matrix);
+ qglProgramUniformMatrix4fvEXT(program->program, uniforms[uniformNum], 1, GL_FALSE, matrix);
}
void GLSL_DeleteGPUShader(shaderProgram_t *program)
diff --git a/SP/code/rend2/tr_image.c b/SP/code/rend2/tr_image.c
index 65a4f92..9fd2fb5 100644
--- a/SP/code/rend2/tr_image.c
+++ b/SP/code/rend2/tr_image.c
@@ -134,8 +134,8 @@ void GL_TextureMode( const char *string ) {
for ( i = 0 ; i < tr.numImages ; i++ ) {
glt = tr.images[ i ];
if ( glt->flags & IMGFLAG_MIPMAP && !(glt->flags & IMGFLAG_CUBEMAP) ) {
- qglTextureParameterf(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min);
- qglTextureParameterf(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max);
+ qglTextureParameterfEXT(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min);
+ qglTextureParameterfEXT(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max);
}
}
}
@@ -2014,7 +2014,7 @@ static void RawImage_UploadToRgtc2Texture(GLuint texture, byte *data, int width,
}
}
- qglCompressedTextureImage2D(texture, GL_TEXTURE_2D, mip, GL_COMPRESSED_RG_RGTC2, width, height, 0, size, compressedData);
+ qglCompressedTextureImage2DEXT(texture, GL_TEXTURE_2D, mip, GL_COMPRESSED_RG_RGTC2, width, height, 0, size, compressedData);
ri.Hunk_FreeTempMemory(compressedData);
}
@@ -2093,7 +2093,7 @@ static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int
do
{
lastMip = (width == 1 && height == 1) || !mipmap;
- qglTextureImage2D(texture, target, miplevel, internalFormat, width, height, 0, dataFormat, dataType, NULL);
+ qglTextureImage2DEXT(texture, target, miplevel, internalFormat, width, height, 0, dataFormat, dataType, NULL);
width = MAX(1, width >> 1);
height = MAX(1, height >> 1);
@@ -2126,9 +2126,9 @@ static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int
if (compressed)
{
if (subtexture)
- qglCompressedTextureSubImage2D(texture, target, miplevel, x, y, width, height, picFormat, size, data);
+ qglCompressedTextureSubImage2DEXT(texture, target, miplevel, x, y, width, height, picFormat, size, data);
else
- qglCompressedTextureImage2D(texture, target, miplevel, picFormat, width, height, 0, size, data);
+ qglCompressedTextureImage2DEXT(texture, target, miplevel, picFormat, width, height, 0, size, data);
}
else
{
@@ -2138,9 +2138,9 @@ static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int
if (rgtc)
RawImage_UploadToRgtc2Texture(texture, data, width, height, miplevel);
else if (subtexture)
- qglTextureSubImage2D(texture, target, miplevel, x, y, width, height, dataFormat, dataType, data);
+ qglTextureSubImage2DEXT(texture, target, miplevel, x, y, width, height, dataFormat, dataType, data);
else
- qglTextureImage2D(texture, target, miplevel, internalFormat, width, height, 0, dataFormat, dataType, data);
+ qglTextureImage2DEXT(texture, target, miplevel, internalFormat, width, height, 0, dataFormat, dataType, data);
if (!lastMip && numMips < 2)
{
@@ -2280,19 +2280,19 @@ done:
if (mipmap)
{
if (textureFilterAnisotropic && !cubemap)
- qglTextureParameteri(image->texnum, textureTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT,
+ qglTextureParameteriEXT(image->texnum, textureTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT,
(GLint)Com_Clamp(1, maxAnisotropy, r_ext_max_anisotropy->integer));
- qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, gl_filter_min);
- qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, gl_filter_max);
+ qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, gl_filter_min);
+ qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, gl_filter_max);
}
else
{
if (textureFilterAnisotropic && !cubemap)
- qglTextureParameteri(image->texnum, textureTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1);
+ qglTextureParameteriEXT(image->texnum, textureTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1);
- qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
// Fix for sampling depth buffer on old nVidia cards
@@ -2303,9 +2303,9 @@ done:
case GL_DEPTH_COMPONENT16_ARB:
case GL_DEPTH_COMPONENT24_ARB:
case GL_DEPTH_COMPONENT32_ARB:
- qglTextureParameterf(image->texnum, textureTarget, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE);
- qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ qglTextureParameterfEXT(image->texnum, textureTarget, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE);
+ qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
break;
default:
break;
@@ -2369,14 +2369,14 @@ image_t *R_CreateImageExt2( const char *name, byte *pic, int width, int height,
if (image->flags & IMGFLAG_CUBEMAP)
{
- qglTextureParameterf(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, glWrapClampMode);
- qglTextureParameterf(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, glWrapClampMode);
- qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, glWrapClampMode);
+ qglTextureParameterfEXT(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, glWrapClampMode);
+ qglTextureParameterfEXT(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, glWrapClampMode);
+ qglTextureParameteriEXT(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, glWrapClampMode);
}
else
{
- qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, glWrapClampMode);
- qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, glWrapClampMode);
+ qglTextureParameterfEXT(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, glWrapClampMode);
+ qglTextureParameterfEXT(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, glWrapClampMode);
}
hash = generateHashValue( name );
@@ -2945,11 +2945,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];
@@ -3004,8 +3001,9 @@ void R_CreateBuiltinImages( void ) {
for ( x = 0; x < 4; x++)
{
tr.sunShadowDepthImage[x] = R_CreateImage(va("*sunshadowdepth%i", x), NULL, r_shadowMapSize->integer, r_shadowMapSize->integer, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24_ARB);
- qglTextureParameterf(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
- qglTextureParameterf(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
+
+ qglTextureParameterfEXT(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
+ qglTextureParameterfEXT(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
}
tr.screenShadowImage = R_CreateImage("*screenShadow", NULL, width, height, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_RGBA8);
diff --git a/SP/code/rend2/tr_init.c b/SP/code/rend2/tr_init.c
index cf00d00..267f529 100644
--- a/SP/code/rend2/tr_init.c
+++ b/SP/code/rend2/tr_init.c
@@ -1048,7 +1048,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/SP/code/rend2/tr_local.h b/SP/code/rend2/tr_local.h
index f6d342b..fd31689 100644
--- a/SP/code/rend2/tr_local.h
+++ b/SP/code/rend2/tr_local.h
@@ -1547,7 +1547,6 @@ typedef struct {
qboolean textureNonPowerOfTwo;
qboolean textureFloat;
qboolean halfFloatPixel;
- qboolean packedDepthStencil;
textureCompressionRef_t textureCompression;
qboolean swizzleNormalmap;
diff --git a/SP/code/rend2/tr_shade.c b/SP/code/rend2/tr_shade.c
index ec1981b..9800079 100644
--- a/SP/code/rend2/tr_shade.c
+++ b/SP/code/rend2/tr_shade.c
@@ -1577,7 +1577,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)
{
@@ -1691,7 +1693,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/SP/code/rend2/tr_vbo.c b/SP/code/rend2/tr_vbo.c
index 61ede4e..b1ff3d6 100644
--- a/SP/code/rend2/tr_vbo.c
+++ b/SP/code/rend2/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/iortcw.git
More information about the Pkg-games-commits
mailing list