[iortcw] 88/152: All: Rend2: Require OpenGL 2.0 / Add new GL function loader
Simon McVittie
smcv at debian.org
Fri Sep 8 10:40:15 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 e46356a18ecf791481cf37f8791057df4b81d8c9
Author: MAN-AT-ARMS <M4N4T4RMS at gmail.com>
Date: Mon Jul 25 17:35:56 2016 -0400
All: Rend2: Require OpenGL 2.0 / Add new GL function loader
---
MP/code/rend2/qgl.h | 183 +++++++------------
MP/code/rend2/tr_backend.c | 6 +-
MP/code/rend2/tr_dsa.c | 38 ++--
MP/code/rend2/tr_dsa.h | 2 +-
MP/code/rend2/tr_extensions.c | 400 ++++-------------------------------------
MP/code/rend2/tr_glsl.c | 126 ++++++-------
MP/code/rend2/tr_init.c | 8 +-
MP/code/rend2/tr_local.h | 10 +-
MP/code/rend2/tr_postprocess.c | 4 +-
MP/code/rend2/tr_shade.c | 6 +-
MP/code/rend2/tr_surface.c | 16 +-
MP/code/rend2/tr_vbo.c | 68 +++----
SP/code/rend2/qgl.h | 183 +++++++------------
SP/code/rend2/tr_backend.c | 6 +-
SP/code/rend2/tr_dsa.c | 38 ++--
SP/code/rend2/tr_dsa.h | 2 +-
SP/code/rend2/tr_extensions.c | 400 ++++-------------------------------------
SP/code/rend2/tr_glsl.c | 126 ++++++-------
SP/code/rend2/tr_init.c | 8 +-
SP/code/rend2/tr_local.h | 10 +-
SP/code/rend2/tr_postprocess.c | 4 +-
SP/code/rend2/tr_shade.c | 6 +-
SP/code/rend2/tr_surface.c | 16 +-
SP/code/rend2/tr_vbo.c | 68 +++----
24 files changed, 486 insertions(+), 1248 deletions(-)
diff --git a/MP/code/rend2/qgl.h b/MP/code/rend2/qgl.h
index 1c73e40..351e6ae 100644
--- a/MP/code/rend2/qgl.h
+++ b/MP/code/rend2/qgl.h
@@ -453,104 +453,76 @@ extern void ( APIENTRY * qglPNTrianglesfATI )( GLenum pname, GLfloat param );
#define qglVertexPointer glVertexPointer
#define qglViewport glViewport
-// GL_EXT_draw_range_elements
-extern void (APIENTRY * qglDrawRangeElementsEXT) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
-
-// GL_EXT_multi_draw_arrays
-extern void (APIENTRY * qglMultiDrawArraysEXT) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
-extern void (APIENTRY * qglMultiDrawElementsEXT) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount);
-
// rend2
-// GL_ARB_shading_language_100
-#ifndef GL_ARB_shading_language_100
-#define GL_ARB_shading_language_100
-#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C
-#endif
-
-// GL_ARB_vertex_program
-extern void (APIENTRY * qglVertexAttrib4fARB) (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
-extern void (APIENTRY * qglVertexAttrib4fvARB) (GLuint, const GLfloat *);
-extern void (APIENTRY * qglVertexAttribPointerARB) (GLuint index, GLint size, GLenum type, GLboolean normalized,
- GLsizei stride, const GLvoid * pointer);
-extern void (APIENTRY * qglEnableVertexAttribArrayARB) (GLuint index);
-extern void (APIENTRY * qglDisableVertexAttribArrayARB) (GLuint index);
-
-// GL_ARB_vertex_buffer_object
-extern void (APIENTRY * qglBindBufferARB) (GLenum target, GLuint buffer);
-extern void (APIENTRY * qglDeleteBuffersARB) (GLsizei n, const GLuint * buffers);
-extern void (APIENTRY * qglGenBuffersARB) (GLsizei n, GLuint * buffers);
-extern GLboolean(APIENTRY * qglIsBufferARB) (GLuint buffer);
-extern void (APIENTRY * qglBufferDataARB) (GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage);
-extern void (APIENTRY * qglBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data);
-extern void (APIENTRY * qglGetBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data);
-extern void (APIENTRY * qglGetBufferParameterivARB) (GLenum target, GLenum pname, GLint * params);
-extern void (APIENTRY * qglGetBufferPointervARB) (GLenum target, GLenum pname, GLvoid * *params);
-
-// GL_ARB_shader_objects
-extern void (APIENTRY * qglDeleteObjectARB) (GLhandleARB obj);
-extern GLhandleARB(APIENTRY * qglGetHandleARB) (GLenum pname);
-extern void (APIENTRY * qglDetachObjectARB) (GLhandleARB containerObj, GLhandleARB attachedObj);
-extern GLhandleARB(APIENTRY * qglCreateShaderObjectARB) (GLenum shaderType);
-extern void (APIENTRY * qglShaderSourceARB) (GLhandleARB shaderObj, GLsizei count, const GLcharARB * *string,
- const GLint * length);
-extern void (APIENTRY * qglCompileShaderARB) (GLhandleARB shaderObj);
-extern GLhandleARB(APIENTRY * qglCreateProgramObjectARB) (void);
-extern void (APIENTRY * qglAttachObjectARB) (GLhandleARB containerObj, GLhandleARB obj);
-extern void (APIENTRY * qglLinkProgramARB) (GLhandleARB programObj);
-extern void (APIENTRY * qglUseProgramObjectARB) (GLhandleARB programObj);
-extern void (APIENTRY * qglValidateProgramARB) (GLhandleARB programObj);
-extern void (APIENTRY * qglUniform1fARB) (GLint location, GLfloat v0);
-extern void (APIENTRY * qglUniform2fARB) (GLint location, GLfloat v0, GLfloat v1);
-extern void (APIENTRY * qglUniform3fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
-extern void (APIENTRY * qglUniform4fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
-extern void (APIENTRY * qglUniform1iARB) (GLint location, GLint v0);
-extern void (APIENTRY * qglUniform2iARB) (GLint location, GLint v0, GLint v1);
-extern void (APIENTRY * qglUniform3iARB) (GLint location, GLint v0, GLint v1, GLint v2);
-extern void (APIENTRY * qglUniform4iARB) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
-extern void (APIENTRY * qglUniform1fvARB) (GLint location, GLsizei count, const GLfloat * value);
-extern void (APIENTRY * qglUniform2fvARB) (GLint location, GLsizei count, const GLfloat * value);
-extern void (APIENTRY * qglUniform3fvARB) (GLint location, GLsizei count, const GLfloat * value);
-extern void (APIENTRY * qglUniform4fvARB) (GLint location, GLsizei count, const GLfloat * value);
-extern void (APIENTRY * qglUniform2ivARB) (GLint location, GLsizei count, const GLint * value);
-extern void (APIENTRY * qglUniform3ivARB) (GLint location, GLsizei count, const GLint * value);
-extern void (APIENTRY * qglUniform4ivARB) (GLint location, GLsizei count, const GLint * value);
-extern void (APIENTRY * qglUniformMatrix2fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-extern void (APIENTRY * qglUniformMatrix3fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-extern void (APIENTRY * qglUniformMatrix4fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-extern void (APIENTRY * qglGetObjectParameterfvARB) (GLhandleARB obj, GLenum pname, GLfloat * params);
-extern void (APIENTRY * qglGetObjectParameterivARB) (GLhandleARB obj, GLenum pname, GLint * params);
-extern void (APIENTRY * qglGetInfoLogARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog);
-extern void (APIENTRY * qglGetAttachedObjectsARB) (GLhandleARB containerObj, GLsizei maxCount, GLsizei * count,
- GLhandleARB * obj);
-extern GLint(APIENTRY * qglGetUniformLocationARB) (GLhandleARB programObj, const GLcharARB * name);
-extern void (APIENTRY * qglGetActiveUniformARB) (GLhandleARB programObj, GLuint index, GLsizei maxIndex, GLsizei * length,
- GLint * size, GLenum * type, GLcharARB * name);
-extern void (APIENTRY * qglGetUniformfvARB) (GLhandleARB programObj, GLint location, GLfloat * params);
-extern void (APIENTRY * qglGetUniformivARB) (GLhandleARB programObj, GLint location, GLint * params);
-extern void (APIENTRY * qglGetShaderSourceARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source);
-
-// GL_ARB_vertex_shader
-extern void (APIENTRY * qglBindAttribLocationARB) (GLhandleARB programObj, GLuint index, const GLcharARB * name);
-extern void (APIENTRY * qglGetActiveAttribARB) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length,
- GLint * size, GLenum * type, GLcharARB * name);
-extern GLint(APIENTRY * qglGetAttribLocationARB) (GLhandleARB programObj, const GLcharARB * name);
-
-// GL_ARB_texture_compression
-extern void (APIENTRY * qglCompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
- GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglCompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
- GLint border, GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglCompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border,
- GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglCompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
- GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglCompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglCompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format,
- GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglGetCompressedTexImageARB)(GLenum target, GLint lod,
- GLvoid *img);
+// GL function loader, based on https://gist.github.com/rygorous/16796a0c876cf8a5f542caddb55bce8a
+
+// OpenGL 1.2, was GL_EXT_draw_range_elements
+#define QGL_1_2_PROCS \
+ GLE(void, DrawRangeElements, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices) \
+
+// OpenGL 1.3, was GL_ARB_texture_compression
+#define QGL_1_3_PROCS \
+ GLE(void, CompressedTexImage2D, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data) \
+ GLE(void, CompressedTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data) \
+
+// OpenGL 1.4, was GL_EXT_multi_draw_arrays
+#define QGL_1_4_PROCS \
+ GLE(void, MultiDrawElements, GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount) \
+
+// OpenGL 1.5, was GL_ARB_vertex_buffer_object and GL_ARB_occlusion_query
+#define QGL_1_5_PROCS \
+ GLE(void, GenQueries, GLsizei n, GLuint *ids) \
+ GLE(void, DeleteQueries, GLsizei n, const GLuint *ids) \
+ GLE(void, BeginQuery, GLenum target, GLuint id) \
+ GLE(void, EndQuery, GLenum target) \
+ GLE(void, GetQueryObjectiv, GLuint id, GLenum pname, GLint *params) \
+ GLE(void, GetQueryObjectuiv, GLuint id, GLenum pname, GLuint *params) \
+ GLE(void, BindBuffer, GLenum target, GLuint buffer) \
+ GLE(void, DeleteBuffers, GLsizei n, const GLuint *buffers) \
+ GLE(void, GenBuffers, GLsizei n, GLuint *buffers) \
+ GLE(void, BufferData, GLenum target, GLsizeiptr size, const void *data, GLenum usage) \
+ GLE(void, BufferSubData, GLenum target, GLintptr offset, GLsizeiptr size, const void *data) \
+
+// OpenGL 2.0, was GL_ARB_shading_language_100, GL_ARB_vertex_program, GL_ARB_shader_objects, and GL_ARB_vertex_shader
+#define QGL_2_0_PROCS \
+ GLE(void, AttachShader, GLuint program, GLuint shader) \
+ GLE(void, BindAttribLocation, GLuint program, GLuint index, const GLchar *name) \
+ GLE(void, CompileShader, GLuint shader) \
+ GLE(GLuint, CreateProgram, void) \
+ GLE(GLuint, CreateShader, GLenum type) \
+ GLE(void, DeleteProgram, GLuint program) \
+ GLE(void, DeleteShader, GLuint shader) \
+ GLE(void, DetachShader, GLuint program, GLuint shader) \
+ GLE(void, DisableVertexAttribArray, GLuint index) \
+ GLE(void, EnableVertexAttribArray, GLuint index) \
+ GLE(void, GetActiveUniform, GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name) \
+ GLE(void, GetProgramiv, GLuint program, GLenum pname, GLint *params) \
+ GLE(void, GetProgramInfoLog, GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog) \
+ GLE(void, GetShaderiv, GLuint shader, GLenum pname, GLint *params) \
+ GLE(void, GetShaderInfoLog, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog) \
+ GLE(void, GetShaderSource, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source) \
+ GLE(GLint, GetUniformLocation, GLuint program, const GLchar *name) \
+ GLE(void, LinkProgram, GLuint program) \
+ GLE(void, ShaderSource, GLuint shader, GLsizei count, const GLchar* *string, const GLint *length) \
+ GLE(void, UseProgram, GLuint program) \
+ GLE(void, Uniform1f, GLint location, GLfloat v0) \
+ GLE(void, Uniform2f, GLint location, GLfloat v0, GLfloat v1) \
+ GLE(void, Uniform3f, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) \
+ GLE(void, Uniform4f, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) \
+ GLE(void, Uniform1i, GLint location, GLint v0) \
+ GLE(void, Uniform1fv, GLint location, GLsizei count, const GLfloat *value) \
+ GLE(void, UniformMatrix4fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) \
+ 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
@@ -687,25 +659,6 @@ extern void (APIENTRY * qglGenerateMipmapEXT)(GLenum target);
#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1
#endif
-// GL_ARB_occlusion_query
-extern void (APIENTRY * qglGenQueriesARB)(GLsizei n, GLuint *ids);
-extern void (APIENTRY * qglDeleteQueriesARB)(GLsizei n, const GLuint *ids);
-extern GLboolean (APIENTRY * qglIsQueryARB)(GLuint id);
-extern void (APIENTRY * qglBeginQueryARB)(GLenum target, GLuint id);
-extern void (APIENTRY * qglEndQueryARB)(GLenum target);
-extern void (APIENTRY * qglGetQueryivARB)(GLenum target, GLenum pname, GLint *params);
-extern void (APIENTRY * qglGetQueryObjectivARB)(GLuint id, GLenum pname, GLint *params);
-extern void (APIENTRY * qglGetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint *params);
-
-#ifndef GL_ARB_occlusion_query
-#define GL_ARB_occlusion_query
-#define GL_SAMPLES_PASSED_ARB 0x8914
-#define GL_QUERY_COUNTER_BITS_ARB 0x8864
-#define GL_CURRENT_QUERY_ARB 0x8865
-#define GL_QUERY_RESULT_ARB 0x8866
-#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867
-#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,
diff --git a/MP/code/rend2/tr_backend.c b/MP/code/rend2/tr_backend.c
index 3ce6fbd..2334f1f 100644
--- a/MP/code/rend2/tr_backend.c
+++ b/MP/code/rend2/tr_backend.c
@@ -718,7 +718,7 @@ void RB_RenderDrawSurfList( drawSurf_t *drawSurfs, int numDrawSurfs ) {
R_TransformDlights( backEnd.refdef.num_dlights, backEnd.refdef.dlights, &backEnd.or );
if (inQuery) {
- qglEndQueryARB(GL_SAMPLES_PASSED_ARB);
+ qglEndQuery(GL_SAMPLES_PASSED);
}
if (glRefConfig.framebufferObject)
@@ -1463,14 +1463,14 @@ const void *RB_DrawSurfs( const void *data ) {
if (glRefConfig.occlusionQuery)
{
tr.sunFlareQueryActive[tr.sunFlareQueryIndex] = qtrue;
- qglBeginQueryARB(GL_SAMPLES_PASSED_ARB, tr.sunFlareQuery[tr.sunFlareQueryIndex]);
+ qglBeginQuery(GL_SAMPLES_PASSED, tr.sunFlareQuery[tr.sunFlareQueryIndex]);
}
RB_DrawSun(0.3, tr.sunFlareShader);
if (glRefConfig.occlusionQuery)
{
- qglEndQueryARB(GL_SAMPLES_PASSED_ARB);
+ qglEndQuery(GL_SAMPLES_PASSED);
}
FBO_Bind(oldFbo);
diff --git a/MP/code/rend2/tr_dsa.c b/MP/code/rend2/tr_dsa.c
index 9cd481b..4ea7699 100644
--- a/MP/code/rend2/tr_dsa.c
+++ b/MP/code/rend2/tr_dsa.c
@@ -124,7 +124,7 @@ GLvoid APIENTRY GLDSA_CompressedTextureImage2D(GLuint texture, GLenum target, G
GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
- qglCompressedTexImage2DARB(target, level, internalformat, width, height, border, imageSize, data);
+ qglCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
}
GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLint level,
@@ -132,7 +132,7 @@ GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target,
GLsizei imageSize, const GLvoid *data)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
- qglCompressedTexSubImage2DARB(target, level, xoffset, yoffset, width, height, format, imageSize, data);
+ qglCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
}
GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target)
@@ -143,66 +143,66 @@ GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target)
void GL_BindNullProgram()
{
- qglUseProgramObjectARB(0);
+ qglUseProgram(0);
glDsaState.program = 0;
}
-int GL_UseProgramObject(GLuint program)
+int GL_UseProgram(GLuint program)
{
if (glDsaState.program == program)
return 0;
- qglUseProgramObjectARB(program);
+ qglUseProgram(program);
glDsaState.program = program;
return 1;
}
GLvoid APIENTRY GLDSA_ProgramUniform1i(GLuint program, GLint location, GLint v0)
{
- GL_UseProgramObject(program);
- qglUniform1iARB(location, v0);
+ GL_UseProgram(program);
+ qglUniform1i(location, v0);
}
GLvoid APIENTRY GLDSA_ProgramUniform1f(GLuint program, GLint location, GLfloat v0)
{
- GL_UseProgramObject(program);
- qglUniform1fARB(location, v0);
+ GL_UseProgram(program);
+ qglUniform1f(location, v0);
}
GLvoid APIENTRY GLDSA_ProgramUniform2f(GLuint program, GLint location,
GLfloat v0, GLfloat v1)
{
- GL_UseProgramObject(program);
- qglUniform2fARB(location, v0, v1);
+ GL_UseProgram(program);
+ qglUniform2f(location, v0, v1);
}
GLvoid APIENTRY GLDSA_ProgramUniform3f(GLuint program, GLint location,
GLfloat v0, GLfloat v1, GLfloat v2)
{
- GL_UseProgramObject(program);
- qglUniform3fARB(location, v0, v1, v2);
+ GL_UseProgram(program);
+ qglUniform3f(location, v0, v1, v2);
}
GLvoid APIENTRY GLDSA_ProgramUniform4f(GLuint program, GLint location,
GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
{
- GL_UseProgramObject(program);
- qglUniform4fARB(location, v0, v1, v2, v3);
+ GL_UseProgram(program);
+ qglUniform4f(location, v0, v1, v2, v3);
}
GLvoid APIENTRY GLDSA_ProgramUniform1fv(GLuint program, GLint location,
GLsizei count, const GLfloat *value)
{
- GL_UseProgramObject(program);
- qglUniform1fvARB(location, count, value);
+ GL_UseProgram(program);
+ qglUniform1fv(location, count, value);
}
GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fv(GLuint program, GLint location,
GLsizei count, GLboolean transpose,
const GLfloat *value)
{
- GL_UseProgramObject(program);
- qglUniformMatrix4fvARB(location, count, transpose, value);
+ GL_UseProgram(program);
+ qglUniformMatrix4fv(location, count, transpose, value);
}
void GL_BindNullFramebuffers()
diff --git a/MP/code/rend2/tr_dsa.h b/MP/code/rend2/tr_dsa.h
index 9d610ef..f57944d 100644
--- a/MP/code/rend2/tr_dsa.h
+++ b/MP/code/rend2/tr_dsa.h
@@ -44,7 +44,7 @@ GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target,
GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target);
void GL_BindNullProgram(void);
-int GL_UseProgramObject(GLuint program);
+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);
diff --git a/MP/code/rend2/tr_extensions.c b/MP/code/rend2/tr_extensions.c
index 9c3b7a4..3aa6ecc 100644
--- a/MP/code/rend2/tr_extensions.c
+++ b/MP/code/rend2/tr_extensions.c
@@ -30,101 +30,13 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "tr_local.h"
#include "tr_dsa.h"
-// GL_EXT_draw_range_elements
-void (APIENTRY * qglDrawRangeElementsEXT) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
-
-// GL_EXT_multi_draw_arrays
-void (APIENTRY * qglMultiDrawArraysEXT) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
-void (APIENTRY * qglMultiDrawElementsEXT) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount);
-
-// GL_ARB_vertex_shader
-void (APIENTRY * qglBindAttribLocationARB) (GLhandleARB programObj, GLuint index, const GLcharARB * name);
-void (APIENTRY * qglGetActiveAttribARB) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length,
- GLint * size, GLenum * type, GLcharARB * name);
-GLint(APIENTRY * qglGetAttribLocationARB) (GLhandleARB programObj, const GLcharARB * name);
-
-// GL_ARB_vertex_program
-void (APIENTRY * qglVertexAttrib4fARB) (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
-void (APIENTRY * qglVertexAttrib4fvARB) (GLuint, const GLfloat *);
-void (APIENTRY * qglVertexAttribPointerARB) (GLuint index, GLint size, GLenum type, GLboolean normalized,
- GLsizei stride, const GLvoid * pointer);
-void (APIENTRY * qglEnableVertexAttribArrayARB) (GLuint index);
-void (APIENTRY * qglDisableVertexAttribArrayARB) (GLuint index);
-
-// GL_ARB_vertex_buffer_object
-void (APIENTRY * qglBindBufferARB) (GLenum target, GLuint buffer);
-void (APIENTRY * qglDeleteBuffersARB) (GLsizei n, const GLuint * buffers);
-void (APIENTRY * qglGenBuffersARB) (GLsizei n, GLuint * buffers);
-
-GLboolean(APIENTRY * qglIsBufferARB) (GLuint buffer);
-void (APIENTRY * qglBufferDataARB) (GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage);
-void (APIENTRY * qglBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data);
-void (APIENTRY * qglGetBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data);
-
-void (APIENTRY * qglGetBufferParameterivARB) (GLenum target, GLenum pname, GLint * params);
-void (APIENTRY * qglGetBufferPointervARB) (GLenum target, GLenum pname, GLvoid * *params);
-
-// GL_ARB_shader_objects
-void (APIENTRY * qglDeleteObjectARB) (GLhandleARB obj);
-
-GLhandleARB(APIENTRY * qglGetHandleARB) (GLenum pname);
-void (APIENTRY * qglDetachObjectARB) (GLhandleARB containerObj, GLhandleARB attachedObj);
-
-GLhandleARB(APIENTRY * qglCreateShaderObjectARB) (GLenum shaderType);
-void (APIENTRY * qglShaderSourceARB) (GLhandleARB shaderObj, GLsizei count, const GLcharARB * *string,
- const GLint * length);
-void (APIENTRY * qglCompileShaderARB) (GLhandleARB shaderObj);
-
-GLhandleARB(APIENTRY * qglCreateProgramObjectARB) (void);
-void (APIENTRY * qglAttachObjectARB) (GLhandleARB containerObj, GLhandleARB obj);
-void (APIENTRY * qglLinkProgramARB) (GLhandleARB programObj);
-void (APIENTRY * qglUseProgramObjectARB) (GLhandleARB programObj);
-void (APIENTRY * qglValidateProgramARB) (GLhandleARB programObj);
-void (APIENTRY * qglUniform1fARB) (GLint location, GLfloat v0);
-void (APIENTRY * qglUniform2fARB) (GLint location, GLfloat v0, GLfloat v1);
-void (APIENTRY * qglUniform3fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
-void (APIENTRY * qglUniform4fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
-void (APIENTRY * qglUniform1iARB) (GLint location, GLint v0);
-void (APIENTRY * qglUniform2iARB) (GLint location, GLint v0, GLint v1);
-void (APIENTRY * qglUniform3iARB) (GLint location, GLint v0, GLint v1, GLint v2);
-void (APIENTRY * qglUniform4iARB) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
-void (APIENTRY * qglUniform1fvARB) (GLint location, GLsizei count, const GLfloat * value);
-void (APIENTRY * qglUniform2fvARB) (GLint location, GLsizei count, const GLfloat * value);
-void (APIENTRY * qglUniform3fvARB) (GLint location, GLsizei count, const GLfloat * value);
-void (APIENTRY * qglUniform4fvARB) (GLint location, GLsizei count, const GLfloat * value);
-void (APIENTRY * qglUniform2ivARB) (GLint location, GLsizei count, const GLint * value);
-void (APIENTRY * qglUniform3ivARB) (GLint location, GLsizei count, const GLint * value);
-void (APIENTRY * qglUniform4ivARB) (GLint location, GLsizei count, const GLint * value);
-void (APIENTRY * qglUniformMatrix2fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-void (APIENTRY * qglUniformMatrix3fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-void (APIENTRY * qglUniformMatrix4fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-void (APIENTRY * qglGetObjectParameterfvARB) (GLhandleARB obj, GLenum pname, GLfloat * params);
-void (APIENTRY * qglGetObjectParameterivARB) (GLhandleARB obj, GLenum pname, GLint * params);
-void (APIENTRY * qglGetInfoLogARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog);
-void (APIENTRY * qglGetAttachedObjectsARB) (GLhandleARB containerObj, GLsizei maxCount, GLsizei * count,
- GLhandleARB * obj);
-GLint(APIENTRY * qglGetUniformLocationARB) (GLhandleARB programObj, const GLcharARB * name);
-void (APIENTRY * qglGetActiveUniformARB) (GLhandleARB programObj, GLuint index, GLsizei maxIndex, GLsizei * length,
- GLint * size, GLenum * type, GLcharARB * name);
-void (APIENTRY * qglGetUniformfvARB) (GLhandleARB programObj, GLint location, GLfloat * params);
-void (APIENTRY * qglGetUniformivARB) (GLhandleARB programObj, GLint location, GLint * params);
-void (APIENTRY * qglGetShaderSourceARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source);
-
-// GL_ARB_texture_compression
-void (APIENTRY * qglCompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
- GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
-void (APIENTRY * qglCompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
- GLint border, GLsizei imageSize, const GLvoid *data);
-void (APIENTRY * qglCompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border,
- GLsizei imageSize, const GLvoid *data);
-void (APIENTRY * qglCompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
- GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
-void (APIENTRY * qglCompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
-void (APIENTRY * qglCompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format,
- GLsizei imageSize, const GLvoid *data);
-void (APIENTRY * qglGetCompressedTexImageARB)(GLenum target, GLint lod,
- GLvoid *img);
+#define GLE(ret, name, ...) 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_EXT_framebuffer_object
GLboolean (APIENTRY * qglIsRenderbufferEXT)(GLuint renderbuffer);
@@ -157,16 +69,6 @@ void (APIENTRY * qglGetFramebufferAttachmentParameterivEXT)(GLenum target, GLenu
void (APIENTRY * qglGenerateMipmapEXT)(GLenum target);
-// GL_ARB_occlusion_query
-void (APIENTRY * qglGenQueriesARB)(GLsizei n, GLuint *ids);
-void (APIENTRY * qglDeleteQueriesARB)(GLsizei n, const GLuint *ids);
-GLboolean (APIENTRY * qglIsQueryARB)(GLuint id);
-void (APIENTRY * qglBeginQueryARB)(GLenum target, GLuint id);
-void (APIENTRY * qglEndQueryARB)(GLenum target);
-void (APIENTRY * qglGetQueryivARB)(GLenum target, GLenum pname, GLint *params);
-void (APIENTRY * qglGetQueryObjectivARB)(GLuint id, GLenum pname, GLint *params);
-void (APIENTRY * qglGetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint *params);
-
// GL_EXT_framebuffer_blit
void (APIENTRY * qglBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
@@ -240,248 +142,47 @@ void GLimp_InitExtraExtensions()
char *extension;
const char* result[3] = { "...ignoring %s\n", "...using %s\n", "...%s not found\n" };
- // GL_EXT_draw_range_elements
- extension = "GL_EXT_draw_range_elements";
- glRefConfig.drawRangeElements = qfalse;
- qglMultiDrawArraysEXT = NULL;
- qglMultiDrawElementsEXT = NULL;
- if( GLimp_HaveExtension( extension ) )
- {
- qglDrawRangeElementsEXT = (void *) SDL_GL_GetProcAddress("glDrawRangeElementsEXT");
-
- if ( r_ext_draw_range_elements->integer)
- glRefConfig.drawRangeElements = qtrue;
-
- ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], extension);
- }
- else
- {
- ri.Printf(PRINT_ALL, result[2], extension);
- }
-
- // GL_EXT_multi_draw_arrays
- extension = "GL_EXT_multi_draw_arrays";
- glRefConfig.multiDrawArrays = qfalse;
- qglMultiDrawArraysEXT = NULL;
- qglMultiDrawElementsEXT = NULL;
- if( GLimp_HaveExtension( extension ) )
- {
- qglMultiDrawArraysEXT = (PFNGLMULTIDRAWARRAYSEXTPROC) SDL_GL_GetProcAddress("glMultiDrawArraysEXT");
- qglMultiDrawElementsEXT = (PFNGLMULTIDRAWELEMENTSEXTPROC) SDL_GL_GetProcAddress("glMultiDrawElementsEXT");
-
- if ( r_ext_multi_draw_arrays->integer )
- glRefConfig.multiDrawArrays = qtrue;
-
- ri.Printf(PRINT_ALL, result[glRefConfig.multiDrawArrays], extension);
- }
- else
- {
- ri.Printf(PRINT_ALL, result[2], extension);
- }
+ 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_ARB_vertex_program
- //glRefConfig.vertexProgram = qfalse;
- extension = "GL_ARB_vertex_program";
- qglVertexAttrib4fARB = NULL;
- qglVertexAttrib4fvARB = NULL;
- qglVertexAttribPointerARB = NULL;
- qglEnableVertexAttribArrayARB = NULL;
- qglDisableVertexAttribArrayARB = NULL;
- if( GLimp_HaveExtension( extension ) )
- {
- qglVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC) SDL_GL_GetProcAddress("glVertexAttrib4fARB");
- qglVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC) SDL_GL_GetProcAddress("glVertexAttrib4fvARB");
- qglVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC) SDL_GL_GetProcAddress("glVertexAttribPointerARB");
- qglEnableVertexAttribArrayARB =
- (PFNGLENABLEVERTEXATTRIBARRAYARBPROC) SDL_GL_GetProcAddress("glEnableVertexAttribArrayARB");
- qglDisableVertexAttribArrayARB =
- (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) SDL_GL_GetProcAddress("glDisableVertexAttribArrayARB");
-
- ri.Printf(PRINT_ALL, result[1], extension);
- //glRefConfig.vertexProgram = qtrue;
- }
- else
- {
- ri.Error(ERR_FATAL, result[2], extension);
- }
-
- // GL_ARB_vertex_buffer_object
- //glRefConfig.vertexBufferObject = qfalse;
- extension = "GL_ARB_vertex_buffer_object";
- qglBindBufferARB = NULL;
- qglDeleteBuffersARB = NULL;
- qglGenBuffersARB = NULL;
- qglIsBufferARB = NULL;
- qglBufferDataARB = NULL;
- qglBufferSubDataARB = NULL;
- qglGetBufferSubDataARB = NULL;
- qglGetBufferParameterivARB = NULL;
- qglGetBufferPointervARB = NULL;
- if( GLimp_HaveExtension( extension ) )
- {
- qglBindBufferARB = (PFNGLBINDBUFFERARBPROC) SDL_GL_GetProcAddress("glBindBufferARB");
- qglDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC) SDL_GL_GetProcAddress("glDeleteBuffersARB");
- qglGenBuffersARB = (PFNGLGENBUFFERSARBPROC) SDL_GL_GetProcAddress("glGenBuffersARB");
- qglIsBufferARB = (PFNGLISBUFFERARBPROC) SDL_GL_GetProcAddress("glIsBufferARB");
- qglBufferDataARB = (PFNGLBUFFERDATAARBPROC) SDL_GL_GetProcAddress("glBufferDataARB");
- qglBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC) SDL_GL_GetProcAddress("glBufferSubDataARB");
- qglGetBufferSubDataARB = (PFNGLGETBUFFERSUBDATAARBPROC) SDL_GL_GetProcAddress("glGetBufferSubDataARB");
- qglGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC) SDL_GL_GetProcAddress("glGetBufferParameterivARB");
- qglGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC) SDL_GL_GetProcAddress("glGetBufferPointervARB");
- ri.Printf(PRINT_ALL, result[1], extension);
- //glRefConfig.vertexBufferObject = qtrue;
- }
- else
- {
- ri.Error(ERR_FATAL, result[2], extension);
- }
-
- // GL_ARB_shader_objects
- extension = "GL_ARB_shader_objects";
- //glRefConfig.shaderObjects = qfalse;
- qglDeleteObjectARB = NULL;
- qglGetHandleARB = NULL;
- qglDetachObjectARB = NULL;
- qglCreateShaderObjectARB = NULL;
- qglShaderSourceARB = NULL;
- qglCompileShaderARB = NULL;
- qglCreateProgramObjectARB = NULL;
- qglAttachObjectARB = NULL;
- qglLinkProgramARB = NULL;
- qglUseProgramObjectARB = NULL;
- qglValidateProgramARB = NULL;
- qglUniform1fARB = NULL;
- qglUniform2fARB = NULL;
- qglUniform3fARB = NULL;
- qglUniform4fARB = NULL;
- qglUniform1iARB = NULL;
- qglUniform2iARB = NULL;
- qglUniform3iARB = NULL;
- qglUniform4iARB = NULL;
- qglUniform1fvARB = NULL;
- qglUniform2fvARB = NULL;
- qglUniform3fvARB = NULL;
- qglUniform4fvARB = NULL;
- qglUniform2ivARB = NULL;
- qglUniform3ivARB = NULL;
- qglUniform4ivARB = NULL;
- qglUniformMatrix2fvARB = NULL;
- qglUniformMatrix3fvARB = NULL;
- qglUniformMatrix4fvARB = NULL;
- qglGetObjectParameterfvARB = NULL;
- qglGetObjectParameterivARB = NULL;
- qglGetInfoLogARB = NULL;
- qglGetAttachedObjectsARB = NULL;
- qglGetUniformLocationARB = NULL;
- qglGetActiveUniformARB = NULL;
- qglGetUniformfvARB = NULL;
- qglGetUniformivARB = NULL;
- qglGetShaderSourceARB = NULL;
- if( GLimp_HaveExtension( extension ) )
- {
- qglDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC) SDL_GL_GetProcAddress("glDeleteObjectARB");
- qglGetHandleARB = (PFNGLGETHANDLEARBPROC) SDL_GL_GetProcAddress("glGetHandleARB");
- qglDetachObjectARB = (PFNGLDETACHOBJECTARBPROC) SDL_GL_GetProcAddress("glDetachObjectARB");
- qglCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC) SDL_GL_GetProcAddress("glCreateShaderObjectARB");
- qglShaderSourceARB = (PFNGLSHADERSOURCEARBPROC) SDL_GL_GetProcAddress("glShaderSourceARB");
- qglCompileShaderARB = (PFNGLCOMPILESHADERARBPROC) SDL_GL_GetProcAddress("glCompileShaderARB");
- qglCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC) SDL_GL_GetProcAddress("glCreateProgramObjectARB");
- qglAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) SDL_GL_GetProcAddress("glAttachObjectARB");
- qglLinkProgramARB = (PFNGLLINKPROGRAMARBPROC) SDL_GL_GetProcAddress("glLinkProgramARB");
- qglUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) SDL_GL_GetProcAddress("glUseProgramObjectARB");
- qglValidateProgramARB = (PFNGLVALIDATEPROGRAMARBPROC) SDL_GL_GetProcAddress("glValidateProgramARB");
- qglUniform1fARB = (PFNGLUNIFORM1FARBPROC) SDL_GL_GetProcAddress("glUniform1fARB");
- qglUniform2fARB = (PFNGLUNIFORM2FARBPROC) SDL_GL_GetProcAddress("glUniform2fARB");
- qglUniform3fARB = (PFNGLUNIFORM3FARBPROC) SDL_GL_GetProcAddress("glUniform3fARB");
- qglUniform4fARB = (PFNGLUNIFORM4FARBPROC) SDL_GL_GetProcAddress("glUniform4fARB");
- qglUniform1iARB = (PFNGLUNIFORM1IARBPROC) SDL_GL_GetProcAddress("glUniform1iARB");
- qglUniform2iARB = (PFNGLUNIFORM2IARBPROC) SDL_GL_GetProcAddress("glUniform2iARB");
- qglUniform3iARB = (PFNGLUNIFORM3IARBPROC) SDL_GL_GetProcAddress("glUniform3iARB");
- qglUniform4iARB = (PFNGLUNIFORM4IARBPROC) SDL_GL_GetProcAddress("glUniform4iARB");
- qglUniform1fvARB = (PFNGLUNIFORM1FVARBPROC) SDL_GL_GetProcAddress("glUniform1fvARB");
- qglUniform2fvARB = (PFNGLUNIFORM2FVARBPROC) SDL_GL_GetProcAddress("glUniform2fvARB");
- qglUniform3fvARB = (PFNGLUNIFORM3FVARBPROC) SDL_GL_GetProcAddress("glUniform3fvARB");
- qglUniform4fvARB = (PFNGLUNIFORM4FVARBPROC) SDL_GL_GetProcAddress("glUniform4fvARB");
- qglUniform2ivARB = (PFNGLUNIFORM2IVARBPROC) SDL_GL_GetProcAddress("glUniform2ivARB");
- qglUniform3ivARB = (PFNGLUNIFORM3IVARBPROC) SDL_GL_GetProcAddress("glUniform3ivARB");
- qglUniform4ivARB = (PFNGLUNIFORM4IVARBPROC) SDL_GL_GetProcAddress("glUniform4ivARB");
- qglUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC) SDL_GL_GetProcAddress("glUniformMatrix2fvARB");
- qglUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC) SDL_GL_GetProcAddress("glUniformMatrix3fvARB");
- qglUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC) SDL_GL_GetProcAddress("glUniformMatrix4fvARB");
- qglGetObjectParameterfvARB = (PFNGLGETOBJECTPARAMETERFVARBPROC) SDL_GL_GetProcAddress("glGetObjectParameterfvARB");
- qglGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC) SDL_GL_GetProcAddress("glGetObjectParameterivARB");
- qglGetInfoLogARB = (PFNGLGETINFOLOGARBPROC) SDL_GL_GetProcAddress("glGetInfoLogARB");
- qglGetAttachedObjectsARB = (PFNGLGETATTACHEDOBJECTSARBPROC) SDL_GL_GetProcAddress("glGetAttachedObjectsARB");
- qglGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC) SDL_GL_GetProcAddress("glGetUniformLocationARB");
- qglGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC) SDL_GL_GetProcAddress("glGetActiveUniformARB");
- qglGetUniformfvARB = (PFNGLGETUNIFORMFVARBPROC) SDL_GL_GetProcAddress("glGetUniformfvARB");
- qglGetUniformivARB = (PFNGLGETUNIFORMIVARBPROC) SDL_GL_GetProcAddress("glGetUniformivARB");
- qglGetShaderSourceARB = (PFNGLGETSHADERSOURCEARBPROC) SDL_GL_GetProcAddress("glGetShaderSourceARB");
- ri.Printf(PRINT_ALL, result[1], extension);
- //glRefConfig.shaderObjects = qtrue;
- }
- else
- {
- ri.Error(ERR_FATAL, result[2], extension);
- }
+ // GL function loader, based on https://gist.github.com/rygorous/16796a0c876cf8a5f542caddb55bce8a
- // GL_ARB_vertex_shader
- //glRefConfig.vertexShader = qfalse;
- extension = "GL_ARB_vertex_shader";
- qglBindAttribLocationARB = NULL;
- qglGetActiveAttribARB = NULL;
- qglGetAttribLocationARB = NULL;
- if( GLimp_HaveExtension( extension ) )
- {
- //int reservedComponents;
+#define GLE(ret, name, ...) qgl##name = (name##proc *) SDL_GL_GetProcAddress("gl" #name);
- //qglGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, &glConfig.maxVertexUniforms);
- //qglGetIntegerv(GL_MAX_VARYING_FLOATS_ARB, &glConfig.maxVaryingFloats);
- //qglGetIntegerv(GL_MAX_VERTEX_ATTRIBS_ARB, &glConfig.maxVertexAttribs);
+ // OpenGL 1.2, was GL_EXT_draw_range_elements
+ QGL_1_2_PROCS;
+ glRefConfig.drawRangeElements = r_ext_draw_range_elements->integer ? qtrue : qfalse;
+ ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], "glDrawRangeElements()");
- //reservedComponents = 16 * 10; // approximation how many uniforms we have besides the bone matrices
+ // OpenGL 1.3, was GL_ARB_texture_compression
+ QGL_1_3_PROCS;
-#if 0
- if(glConfig.driverType == GLDRV_MESA)
- {
- // HACK
- // restrict to number of vertex uniforms to 512 because of:
- // xreal.x86_64: nv50_program.c:4181: nv50_program_validate_data: Assertion `p->param_nr <= 512' failed
+ // 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()");
- glConfig.maxVertexUniforms = Q_bound(0, glConfig.maxVertexUniforms, 512);
- }
-#endif
+ // OpenGL 1.5, was GL_ARB_vertex_buffer_object and GL_ARB_occlusion_query
+ QGL_1_5_PROCS;
+ glRefConfig.occlusionQuery = qtrue;
- //glConfig.maxVertexSkinningBones = (int) Q_bound(0.0, (Q_max(glConfig.maxVertexUniforms - reservedComponents, 0) / 16), MAX_BONES);
- //glConfig.vboVertexSkinningAvailable = r_vboVertexSkinning->integer && ((glConfig.maxVertexSkinningBones >= 12) ? qtrue : qfalse);
+ // 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;
- qglBindAttribLocationARB = (PFNGLBINDATTRIBLOCATIONARBPROC) SDL_GL_GetProcAddress("glBindAttribLocationARB");
- qglGetActiveAttribARB = (PFNGLGETACTIVEATTRIBARBPROC) SDL_GL_GetProcAddress("glGetActiveAttribARB");
- qglGetAttribLocationARB = (PFNGLGETATTRIBLOCATIONARBPROC) SDL_GL_GetProcAddress("glGetAttribLocationARB");
- ri.Printf(PRINT_ALL, result[1], extension);
- //glRefConfig.vertexShader = qtrue;
- }
- else
- {
- ri.Error(ERR_FATAL, result[2], extension);
- }
+#undef GLE
- // GL_ARB_shading_language_100
- extension = "GL_ARB_shading_language_100";
- if( GLimp_HaveExtension( extension ) )
+ if (1)
{
char version[256];
- Q_strncpyz( version, (char *) qglGetString (GL_SHADING_LANGUAGE_VERSION_ARB), sizeof( version ) );
+ Q_strncpyz(version, (char *)qglGetString(GL_SHADING_LANGUAGE_VERSION), sizeof(version));
sscanf(version, "%d.%d", &glRefConfig.glslMajorVersion, &glRefConfig.glslMinorVersion);
ri.Printf(PRINT_ALL, "...using GLSL version %s\n", version);
}
- else
- {
- ri.Error(ERR_FATAL, result[2], extension);
- }
glRefConfig.memInfo = MI_NONE;
@@ -591,27 +292,6 @@ void GLimp_InitExtraExtensions()
ri.Printf(PRINT_ALL, result[2], extension);
}
- // GL_ARB_occlusion_query
- extension = "GL_ARB_occlusion_query";
- glRefConfig.occlusionQuery = qfalse;
- if (GLimp_HaveExtension(extension))
- {
- qglGenQueriesARB = (PFNGLGENQUERIESARBPROC) SDL_GL_GetProcAddress("glGenQueriesARB");
- qglDeleteQueriesARB = (PFNGLDELETEQUERIESARBPROC) SDL_GL_GetProcAddress("glDeleteQueriesARB");
- qglIsQueryARB = (PFNGLISQUERYARBPROC) SDL_GL_GetProcAddress("glIsQueryARB");
- qglBeginQueryARB = (PFNGLBEGINQUERYARBPROC) SDL_GL_GetProcAddress("glBeginQueryARB");
- qglEndQueryARB = (PFNGLENDQUERYARBPROC) SDL_GL_GetProcAddress("glEndQueryARB");
- qglGetQueryivARB = (PFNGLGETQUERYIVARBPROC) SDL_GL_GetProcAddress("glGetQueryivARB");
- qglGetQueryObjectivARB = (PFNGLGETQUERYOBJECTIVARBPROC) SDL_GL_GetProcAddress("glGetQueryObjectivARB");
- qglGetQueryObjectuivARB = (PFNGLGETQUERYOBJECTUIVARBPROC) SDL_GL_GetProcAddress("glGetQueryObjectuivARB");
- glRefConfig.occlusionQuery = qtrue;
- ri.Printf(PRINT_ALL, result[glRefConfig.occlusionQuery], extension);
- }
- else
- {
- ri.Printf(PRINT_ALL, result[2], extension);
- }
-
// GL_EXT_framebuffer_blit
extension = "GL_EXT_framebuffer_blit";
glRefConfig.framebufferBlit = qfalse;
@@ -626,22 +306,6 @@ void GLimp_InitExtraExtensions()
ri.Printf(PRINT_ALL, result[2], extension);
}
- // GL_ARB_texture_compression
- extension = "GL_ARB_texture_compression";
- glRefConfig.arbTextureCompression = qfalse;
- if (GLimp_HaveExtension(extension))
- {
- qglCompressedTexImage3DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexImage3DARB");
- qglCompressedTexImage2DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexImage2DARB");
- qglCompressedTexImage1DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexImage1DARB");
- qglCompressedTexSubImage3DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexSubImage3DARB");
- qglCompressedTexSubImage2DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexSubImage2DARB");
- qglCompressedTexSubImage1DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexSubImage1DARB");
- qglGetCompressedTexImageARB = (void *)SDL_GL_GetProcAddress("glGetCompressedTexImageARB");
- glRefConfig.arbTextureCompression = qtrue;
- ri.Printf(PRINT_ALL, result[glRefConfig.arbTextureCompression], extension);
- }
-
// GL_EXT_framebuffer_multisample
extension = "GL_EXT_framebuffer_multisample";
glRefConfig.framebufferMultisample = qfalse;
@@ -662,7 +326,7 @@ void GLimp_InitExtraExtensions()
extension = "GL_ARB_texture_compression_rgtc";
if (GLimp_HaveExtension(extension))
{
- if (r_ext_compressed_textures->integer && glRefConfig.arbTextureCompression)
+ if (r_ext_compressed_textures->integer)
glRefConfig.textureCompression |= TCR_RGTC;
ri.Printf(PRINT_ALL, result[r_ext_compressed_textures->integer ? 1 : 0], extension);
diff --git a/MP/code/rend2/tr_glsl.c b/MP/code/rend2/tr_glsl.c
index cf2a514..318853a 100644
--- a/MP/code/rend2/tr_glsl.c
+++ b/MP/code/rend2/tr_glsl.c
@@ -153,7 +153,7 @@ static uniformInfo_t uniformsInfo[] =
};
-static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly)
+static void GLSL_PrintInfoLog(GLuint program, qboolean developerOnly)
{
char *msg;
static char msgPart[1024];
@@ -161,7 +161,7 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly)
int i;
int printLevel = developerOnly ? PRINT_DEVELOPER : PRINT_ALL;
- qglGetObjectParameterivARB(object, GL_OBJECT_INFO_LOG_LENGTH_ARB, &maxLength);
+ qglGetProgramiv(program, GL_INFO_LOG_LENGTH, &maxLength);
if (maxLength <= 0)
{
@@ -173,7 +173,7 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly)
if (maxLength < 1023)
{
- qglGetInfoLogARB(object, maxLength, &maxLength, msgPart);
+ qglGetProgramInfoLog(program, maxLength, &maxLength, msgPart);
msgPart[maxLength + 1] = '\0';
@@ -183,7 +183,7 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly)
{
msg = ri.Z_Malloc(maxLength);
- qglGetInfoLogARB(object, maxLength, &maxLength, msg);
+ qglGetProgramInfoLog(program, maxLength, &maxLength, msg);
for(i = 0; i < maxLength; i += 1024)
{
@@ -196,18 +196,18 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly)
}
}
-static void GLSL_PrintShaderSource(GLhandleARB object)
+static void GLSL_PrintShaderSource(GLuint shader)
{
char *msg;
static char msgPart[1024];
int maxLength = 0;
int i;
- qglGetObjectParameterivARB(object, GL_OBJECT_SHADER_SOURCE_LENGTH_ARB, &maxLength);
+ qglGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &maxLength);
msg = ri.Z_Malloc(maxLength);
- qglGetShaderSourceARB(object, maxLength, &maxLength, msg);
+ qglShaderSource(shader, 1, (const GLchar **)&msg, &maxLength);
for(i = 0; i < maxLength; i += 1024)
{
@@ -218,7 +218,7 @@ static void GLSL_PrintShaderSource(GLhandleARB object)
ri.Free(msg);
}
-static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, char *dest, int size )
+static void GLSL_GetShaderHeader( GLenum shaderType, const GLchar *extra, char *dest, int size )
{
float fbufWidthScale, fbufHeightScale;
@@ -229,7 +229,7 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, cha
{
Q_strcat(dest, size, "#version 130\n");
- if(shaderType == GL_VERTEX_SHADER_ARB)
+ if(shaderType == GL_VERTEX_SHADER)
{
Q_strcat(dest, size, "#define attribute in\n");
Q_strcat(dest, size, "#define varying out\n");
@@ -355,20 +355,20 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, cha
Q_strcat(dest, size, "#line 0\n");
}
-static int GLSL_CompileGPUShader(GLhandleARB program, GLhandleARB *prevShader, const GLcharARB *buffer, int size, GLenum shaderType)
+static int GLSL_CompileGPUShader(GLuint program, GLuint *prevShader, const GLchar *buffer, int size, GLenum shaderType)
{
GLint compiled;
- GLhandleARB shader;
+ GLuint shader;
- shader = qglCreateShaderObjectARB(shaderType);
+ shader = qglCreateShader(shaderType);
- qglShaderSourceARB(shader, 1, (const GLcharARB **)&buffer, &size);
+ qglShaderSource(shader, 1, (const GLchar **)&buffer, &size);
// compile shader
- qglCompileShaderARB(shader);
+ qglCompileShader(shader);
// check if shader compiled
- qglGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB, &compiled);
+ qglGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
if(!compiled)
{
GLSL_PrintShaderSource(shader);
@@ -382,12 +382,12 @@ static int GLSL_CompileGPUShader(GLhandleARB program, GLhandleARB *prevShader, c
if (*prevShader)
{
- qglDetachObjectARB(program, *prevShader);
- qglDeleteObjectARB(*prevShader);
+ qglDetachShader(program, *prevShader);
+ qglDeleteShader(*prevShader);
}
// attach shader to program
- qglAttachObjectARB(program, shader);
+ qglAttachShader(program, shader);
*prevShader = shader;
@@ -398,12 +398,12 @@ static int GLSL_LoadGPUShaderText(const char *name, const char *fallback,
GLenum shaderType, char *dest, int destSize)
{
char filename[MAX_QPATH];
- GLcharARB *buffer = NULL;
- const GLcharARB *shaderText = NULL;
+ GLchar *buffer = NULL;
+ const GLchar *shaderText = NULL;
int size;
int result;
- if(shaderType == GL_VERTEX_SHADER_ARB)
+ if(shaderType == GL_VERTEX_SHADER)
{
Com_sprintf(filename, sizeof(filename), "glsl/%s_vp.glsl", name);
}
@@ -457,13 +457,13 @@ static int GLSL_LoadGPUShaderText(const char *name, const char *fallback,
return result;
}
-static void GLSL_LinkProgram(GLhandleARB program)
+static void GLSL_LinkProgram(GLuint program)
{
GLint linked;
- qglLinkProgramARB(program);
+ qglLinkProgram(program);
- qglGetObjectParameterivARB(program, GL_OBJECT_LINK_STATUS_ARB, &linked);
+ qglGetProgramiv(program, GL_LINK_STATUS, &linked);
if(!linked)
{
GLSL_PrintInfoLog(program, qfalse);
@@ -472,13 +472,13 @@ static void GLSL_LinkProgram(GLhandleARB program)
}
}
-static void GLSL_ValidateProgram(GLhandleARB program)
+static void GLSL_ValidateProgram(GLuint program)
{
GLint validated;
- qglValidateProgramARB(program);
+ qglValidateProgram(program);
- qglGetObjectParameterivARB(program, GL_OBJECT_VALIDATE_STATUS_ARB, &validated);
+ qglGetProgramiv(program, GL_VALIDATE_STATUS, &validated);
if(!validated)
{
GLSL_PrintInfoLog(program, qfalse);
@@ -487,19 +487,19 @@ static void GLSL_ValidateProgram(GLhandleARB program)
}
}
-static void GLSL_ShowProgramUniforms(GLhandleARB program)
+static void GLSL_ShowProgramUniforms(GLuint program)
{
int i, count, size;
GLenum type;
char uniformName[1000];
// query the number of active uniforms
- qglGetObjectParameterivARB(program, GL_OBJECT_ACTIVE_UNIFORMS_ARB, &count);
+ qglGetProgramiv(program, GL_ACTIVE_UNIFORMS, &count);
// Loop over each of the active uniforms, and set their value
for(i = 0; i < count; i++)
{
- qglGetActiveUniformARB(program, i, sizeof(uniformName), NULL, &size, &type, uniformName);
+ qglGetActiveUniform(program, i, sizeof(uniformName), NULL, &size, &type, uniformName);
ri.Printf(PRINT_DEVELOPER, "active uniform: '%s'\n", uniformName);
}
@@ -516,64 +516,64 @@ static int GLSL_InitGPUShader2(shaderProgram_t * program, const char *name, int
Q_strncpyz(program->name, name, sizeof(program->name));
- program->program = qglCreateProgramObjectARB();
+ program->program = qglCreateProgram();
program->attribs = attribs;
- if (!(GLSL_CompileGPUShader(program->program, &program->vertexShader, vpCode, strlen(vpCode), GL_VERTEX_SHADER_ARB)))
+ if (!(GLSL_CompileGPUShader(program->program, &program->vertexShader, vpCode, strlen(vpCode), GL_VERTEX_SHADER)))
{
- ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_VERTEX_SHADER_ARB\n", name);
- qglDeleteObjectARB(program->program);
+ ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_VERTEX_SHADER\n", name);
+ qglDeleteProgram(program->program);
return 0;
}
if(fpCode)
{
- if(!(GLSL_CompileGPUShader(program->program, &program->fragmentShader, fpCode, strlen(fpCode), GL_FRAGMENT_SHADER_ARB)))
+ if(!(GLSL_CompileGPUShader(program->program, &program->fragmentShader, fpCode, strlen(fpCode), GL_FRAGMENT_SHADER)))
{
- ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_FRAGMENT_SHADER_ARB\n", name);
- qglDeleteObjectARB(program->program);
+ ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_FRAGMENT_SHADER\n", name);
+ qglDeleteProgram(program->program);
return 0;
}
}
if(attribs & ATTR_POSITION)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_POSITION, "attr_Position");
+ qglBindAttribLocation(program->program, ATTR_INDEX_POSITION, "attr_Position");
if(attribs & ATTR_TEXCOORD)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_TEXCOORD, "attr_TexCoord0");
+ qglBindAttribLocation(program->program, ATTR_INDEX_TEXCOORD, "attr_TexCoord0");
if(attribs & ATTR_LIGHTCOORD)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_LIGHTCOORD, "attr_TexCoord1");
+ qglBindAttribLocation(program->program, ATTR_INDEX_LIGHTCOORD, "attr_TexCoord1");
// if(attribs & ATTR_TEXCOORD2)
-// qglBindAttribLocationARB(program->program, ATTR_INDEX_TEXCOORD2, "attr_TexCoord2");
+// qglBindAttribLocation(program->program, ATTR_INDEX_TEXCOORD2, "attr_TexCoord2");
// if(attribs & ATTR_TEXCOORD3)
-// qglBindAttribLocationARB(program->program, ATTR_INDEX_TEXCOORD3, "attr_TexCoord3");
+// qglBindAttribLocation(program->program, ATTR_INDEX_TEXCOORD3, "attr_TexCoord3");
if(attribs & ATTR_TANGENT)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_TANGENT, "attr_Tangent");
+ qglBindAttribLocation(program->program, ATTR_INDEX_TANGENT, "attr_Tangent");
if(attribs & ATTR_NORMAL)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_NORMAL, "attr_Normal");
+ qglBindAttribLocation(program->program, ATTR_INDEX_NORMAL, "attr_Normal");
if(attribs & ATTR_COLOR)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_COLOR, "attr_Color");
+ qglBindAttribLocation(program->program, ATTR_INDEX_COLOR, "attr_Color");
if(attribs & ATTR_PAINTCOLOR)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_PAINTCOLOR, "attr_PaintColor");
+ qglBindAttribLocation(program->program, ATTR_INDEX_PAINTCOLOR, "attr_PaintColor");
if(attribs & ATTR_LIGHTDIRECTION)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_LIGHTDIRECTION, "attr_LightDirection");
+ qglBindAttribLocation(program->program, ATTR_INDEX_LIGHTDIRECTION, "attr_LightDirection");
if(attribs & ATTR_POSITION2)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_POSITION2, "attr_Position2");
+ qglBindAttribLocation(program->program, ATTR_INDEX_POSITION2, "attr_Position2");
if(attribs & ATTR_NORMAL2)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_NORMAL2, "attr_Normal2");
+ qglBindAttribLocation(program->program, ATTR_INDEX_NORMAL2, "attr_Normal2");
if(attribs & ATTR_TANGENT2)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_TANGENT2, "attr_Tangent2");
+ qglBindAttribLocation(program->program, ATTR_INDEX_TANGENT2, "attr_Tangent2");
GLSL_LinkProgram(program->program);
@@ -581,7 +581,7 @@ static int GLSL_InitGPUShader2(shaderProgram_t * program, const char *name, int
}
static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name,
- int attribs, qboolean fragmentShader, const GLcharARB *extra, qboolean addHeader,
+ int attribs, qboolean fragmentShader, const GLchar *extra, qboolean addHeader,
const char *fallback_vp, const char *fallback_fp)
{
char vpCode[32000];
@@ -593,7 +593,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name,
size = sizeof(vpCode);
if (addHeader)
{
- GLSL_GetShaderHeader(GL_VERTEX_SHADER_ARB, extra, vpCode, size);
+ GLSL_GetShaderHeader(GL_VERTEX_SHADER, extra, vpCode, size);
postHeader = &vpCode[strlen(vpCode)];
size -= strlen(vpCode);
}
@@ -602,7 +602,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name,
postHeader = &vpCode[0];
}
- if (!GLSL_LoadGPUShaderText(name, fallback_vp, GL_VERTEX_SHADER_ARB, postHeader, size))
+ if (!GLSL_LoadGPUShaderText(name, fallback_vp, GL_VERTEX_SHADER, postHeader, size))
{
return 0;
}
@@ -612,7 +612,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name,
size = sizeof(fpCode);
if (addHeader)
{
- GLSL_GetShaderHeader(GL_FRAGMENT_SHADER_ARB, extra, fpCode, size);
+ GLSL_GetShaderHeader(GL_FRAGMENT_SHADER, extra, fpCode, size);
postHeader = &fpCode[strlen(fpCode)];
size -= strlen(fpCode);
}
@@ -621,7 +621,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name,
postHeader = &fpCode[0];
}
- if (!GLSL_LoadGPUShaderText(name, fallback_fp, GL_FRAGMENT_SHADER_ARB, postHeader, size))
+ if (!GLSL_LoadGPUShaderText(name, fallback_fp, GL_FRAGMENT_SHADER, postHeader, size))
{
return 0;
}
@@ -641,7 +641,7 @@ void GLSL_InitUniforms(shaderProgram_t *program)
size = 0;
for (i = 0; i < UNIFORM_COUNT; i++)
{
- uniforms[i] = qglGetUniformLocationARB(program->program, uniformsInfo[i].name);
+ uniforms[i] = qglGetUniformLocation(program->program, uniformsInfo[i].name);
if (uniforms[i] == -1)
continue;
@@ -861,17 +861,17 @@ void GLSL_DeleteGPUShader(shaderProgram_t *program)
{
if (program->vertexShader)
{
- qglDetachObjectARB(program->program, program->vertexShader);
- qglDeleteObjectARB(program->vertexShader);
+ qglDetachShader(program->program, program->vertexShader);
+ qglDeleteShader(program->vertexShader);
}
if (program->fragmentShader)
{
- qglDetachObjectARB(program->program, program->fragmentShader);
- qglDeleteObjectARB(program->fragmentShader);
+ qglDetachShader(program->program, program->fragmentShader);
+ qglDeleteShader(program->fragmentShader);
}
- qglDeleteObjectARB(program->program);
+ qglDeleteProgram(program->program);
if (program->uniformBuffer)
{
@@ -1378,7 +1378,7 @@ void GLSL_ShutdownGPUShaders(void)
ri.Printf(PRINT_ALL, "------- GLSL_ShutdownGPUShaders -------\n");
for (i = 0; i < ATTR_INDEX_COUNT; i++)
- qglDisableVertexAttribArrayARB(i);
+ qglDisableVertexAttribArray(i);
GL_BindNullProgram();
@@ -1424,7 +1424,7 @@ void GLSL_BindProgram(shaderProgram_t * program)
GLimp_LogComment(va("--- GLSL_BindProgram( %s ) ---\n", name));
}
- if (GL_UseProgramObject(programObject))
+ if (GL_UseProgram(programObject))
backEnd.pc.c_glslShaderBinds++;
}
diff --git a/MP/code/rend2/tr_init.c b/MP/code/rend2/tr_init.c
index 7c50aaa..84aba6c 100644
--- a/MP/code/rend2/tr_init.c
+++ b/MP/code/rend2/tr_init.c
@@ -1046,8 +1046,8 @@ void GL_SetDefaultState( void ) {
if (glRefConfig.vertexArrayObject)
qglBindVertexArrayARB(0);
- qglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
- qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
+ qglBindBuffer(GL_ARRAY_BUFFER, 0);
+ qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glState.currentVao = NULL;
glState.vertexAttribsEnabled = 0;
@@ -1532,7 +1532,7 @@ void R_InitQueries(void)
return;
if (r_drawSunRays->integer)
- qglGenQueriesARB(ARRAY_LEN(tr.sunFlareQuery), tr.sunFlareQuery);
+ qglGenQueries(ARRAY_LEN(tr.sunFlareQuery), tr.sunFlareQuery);
}
void R_ShutDownQueries(void)
@@ -1541,7 +1541,7 @@ void R_ShutDownQueries(void)
return;
if (r_drawSunRays->integer)
- qglDeleteQueriesARB(ARRAY_LEN(tr.sunFlareQuery), tr.sunFlareQuery);
+ qglDeleteQueries(ARRAY_LEN(tr.sunFlareQuery), tr.sunFlareQuery);
}
/*
diff --git a/MP/code/rend2/tr_local.h b/MP/code/rend2/tr_local.h
index 7f8264b..af96bba 100644
--- a/MP/code/rend2/tr_local.h
+++ b/MP/code/rend2/tr_local.h
@@ -796,9 +796,9 @@ typedef struct shaderProgram_s
{
char name[MAX_QPATH];
- GLhandleARB program;
- GLhandleARB vertexShader;
- GLhandleARB fragmentShader;
+ GLuint program;
+ GLuint vertexShader;
+ GLuint fragmentShader;
uint32_t attribs; // vertex array attributes
// uniform parameters
@@ -1515,6 +1515,9 @@ typedef enum {
// We can't change glConfig_t without breaking DLL/vms compatibility, so
// store extensions we have here.
typedef struct {
+ int openglMajorVersion;
+ int openglMinorVersion;
+
qboolean drawRangeElements;
qboolean multiDrawArrays;
qboolean occlusionQuery;
@@ -1532,7 +1535,6 @@ typedef struct {
qboolean textureFloat;
qboolean halfFloatPixel;
qboolean packedDepthStencil;
- qboolean arbTextureCompression;
textureCompressionRef_t textureCompression;
qboolean swizzleNormalmap;
diff --git a/MP/code/rend2/tr_postprocess.c b/MP/code/rend2/tr_postprocess.c
index c4e5155..ade9ebf 100644
--- a/MP/code/rend2/tr_postprocess.c
+++ b/MP/code/rend2/tr_postprocess.c
@@ -282,7 +282,7 @@ static qboolean RB_UpdateSunFlareVis(void)
for (iter=0 ; ; ++iter)
{
GLint available = 0;
- qglGetQueryObjectivARB(tr.sunFlareQuery[tr.sunFlareQueryIndex], GL_QUERY_RESULT_AVAILABLE_ARB, &available);
+ qglGetQueryObjectiv(tr.sunFlareQuery[tr.sunFlareQueryIndex], GL_QUERY_RESULT_AVAILABLE, &available);
if (available)
break;
}
@@ -290,7 +290,7 @@ static qboolean RB_UpdateSunFlareVis(void)
ri.Printf(PRINT_DEVELOPER, "Waited %d iterations\n", iter);
}
- qglGetQueryObjectuivARB(tr.sunFlareQuery[tr.sunFlareQueryIndex], GL_QUERY_RESULT_ARB, &sampleCount);
+ qglGetQueryObjectuiv(tr.sunFlareQuery[tr.sunFlareQueryIndex], GL_QUERY_RESULT, &sampleCount);
return sampleCount > 0;
}
diff --git a/MP/code/rend2/tr_shade.c b/MP/code/rend2/tr_shade.c
index 23e0d42..0b93ddd 100644
--- a/MP/code/rend2/tr_shade.c
+++ b/MP/code/rend2/tr_shade.c
@@ -50,7 +50,7 @@ R_DrawElements
void R_DrawElementsVao( int numIndexes, glIndex_t firstIndex, glIndex_t minIndex, glIndex_t maxIndex )
{
if (glRefConfig.drawRangeElements)
- qglDrawRangeElementsEXT(GL_TRIANGLES, minIndex, maxIndex, numIndexes, GL_INDEX_TYPE, BUFFER_OFFSET(firstIndex * sizeof(glIndex_t)));
+ qglDrawRangeElements(GL_TRIANGLES, minIndex, maxIndex, numIndexes, GL_INDEX_TYPE, BUFFER_OFFSET(firstIndex * sizeof(glIndex_t)));
else
qglDrawElements(GL_TRIANGLES, numIndexes, GL_INDEX_TYPE, BUFFER_OFFSET(firstIndex * sizeof(glIndex_t)));
@@ -62,7 +62,7 @@ static void R_DrawMultiElementsVao( int multiDrawPrimitives, glIndex_t *multiDra
{
if (glRefConfig.multiDrawArrays && multiDrawPrimitives > 1)
{
- qglMultiDrawElementsEXT(GL_TRIANGLES, multiDrawNumIndexes, GL_INDEX_TYPE, (const GLvoid **)multiDrawFirstIndex, multiDrawPrimitives);
+ qglMultiDrawElements(GL_TRIANGLES, multiDrawNumIndexes, GL_INDEX_TYPE, (const GLvoid **)multiDrawFirstIndex, multiDrawPrimitives);
}
else
{
@@ -72,7 +72,7 @@ static void R_DrawMultiElementsVao( int multiDrawPrimitives, glIndex_t *multiDra
{
for (i = 0; i < multiDrawPrimitives; i++)
{
- qglDrawRangeElementsEXT(GL_TRIANGLES, multiDrawMinIndex[i], multiDrawMaxIndex[i], multiDrawNumIndexes[i], GL_INDEX_TYPE, multiDrawFirstIndex[i]);
+ qglDrawRangeElements(GL_TRIANGLES, multiDrawMinIndex[i], multiDrawMaxIndex[i], multiDrawNumIndexes[i], GL_INDEX_TYPE, multiDrawFirstIndex[i]);
}
}
else
diff --git a/MP/code/rend2/tr_surface.c b/MP/code/rend2/tr_surface.c
index 3b3769a..864ace5 100644
--- a/MP/code/rend2/tr_surface.c
+++ b/MP/code/rend2/tr_surface.c
@@ -1880,43 +1880,43 @@ void RB_SurfaceVaoMdvMesh(srfVaoMdvMesh_t * surface)
if (glRefConfig.vertexArrayObject)
{
- qglBindBufferARB(GL_ARRAY_BUFFER_ARB, surface->vao->vertexesVBO);
+ qglBindBuffer(GL_ARRAY_BUFFER, surface->vao->vertexesVBO);
}
frameOffset = refEnt->frame * surface->vao->frameSize;
attribIndex = ATTR_INDEX_POSITION;
vAtb = &surface->vao->attribs[attribIndex];
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
attribIndex = ATTR_INDEX_NORMAL;
vAtb = &surface->vao->attribs[attribIndex];
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
attribIndex = ATTR_INDEX_TANGENT;
vAtb = &surface->vao->attribs[attribIndex];
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
frameOffset = refEnt->oldframe * surface->vao->frameSize;
attribIndex = ATTR_INDEX_POSITION2;
vAtb = &surface->vao->attribs[attribIndex];
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
attribIndex = ATTR_INDEX_NORMAL2;
vAtb = &surface->vao->attribs[attribIndex];
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
attribIndex = ATTR_INDEX_TANGENT2;
vAtb = &surface->vao->attribs[attribIndex];
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
if (!glRefConfig.vertexArrayObject)
{
attribIndex = ATTR_INDEX_TEXCOORD;
vAtb = &surface->vao->attribs[attribIndex];
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset));
}
}
diff --git a/MP/code/rend2/tr_vbo.c b/MP/code/rend2/tr_vbo.c
index 8f9ba66..61ede4e 100644
--- a/MP/code/rend2/tr_vbo.c
+++ b/MP/code/rend2/tr_vbo.c
@@ -196,9 +196,9 @@ void Vao_SetVertexPointers(vao_t *vao)
if (vAtb->enabled)
{
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset));
if (glRefConfig.vertexArrayObject || !(glState.vertexAttribsEnabled & attribBit))
- qglEnableVertexAttribArrayARB(attribIndex);
+ qglEnableVertexAttribArray(attribIndex);
if (!glRefConfig.vertexArrayObject || vao == tess.vao)
glState.vertexAttribsEnabled |= attribBit;
@@ -208,7 +208,7 @@ void Vao_SetVertexPointers(vao_t *vao)
// don't disable vertex attribs when using vertex array objects
// Vao_SetVertexPointers is only called during init when using VAOs, and vertex attribs start disabled anyway
if (!glRefConfig.vertexArrayObject && (glState.vertexAttribsEnabled & attribBit))
- qglDisableVertexAttribArrayARB(attribIndex);
+ qglDisableVertexAttribArray(attribIndex);
if (!glRefConfig.vertexArrayObject || vao == tess.vao)
glState.vertexAttribsEnabled &= ~attribBit;
@@ -229,11 +229,11 @@ vao_t *R_CreateVao(const char *name, byte *vertexes, int vertexesSize, byte *ind
switch (usage)
{
case VAO_USAGE_STATIC:
- glUsage = GL_STATIC_DRAW_ARB;
+ glUsage = GL_STATIC_DRAW;
break;
case VAO_USAGE_DYNAMIC:
- glUsage = GL_DYNAMIC_DRAW_ARB;
+ glUsage = GL_DYNAMIC_DRAW;
break;
default:
@@ -269,18 +269,18 @@ vao_t *R_CreateVao(const char *name, byte *vertexes, int vertexesSize, byte *ind
vao->vertexesSize = vertexesSize;
- qglGenBuffersARB(1, &vao->vertexesVBO);
+ qglGenBuffers(1, &vao->vertexesVBO);
- qglBindBufferARB(GL_ARRAY_BUFFER_ARB, vao->vertexesVBO);
- qglBufferDataARB(GL_ARRAY_BUFFER_ARB, vertexesSize, vertexes, glUsage);
+ qglBindBuffer(GL_ARRAY_BUFFER, vao->vertexesVBO);
+ qglBufferData(GL_ARRAY_BUFFER, vertexesSize, vertexes, glUsage);
vao->indexesSize = indexesSize;
- qglGenBuffersARB(1, &vao->indexesIBO);
+ qglGenBuffers(1, &vao->indexesIBO);
- qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vao->indexesIBO);
- qglBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, indexesSize, indexes, glUsage);
+ qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao->indexesIBO);
+ qglBufferData(GL_ELEMENT_ARRAY_BUFFER, indexesSize, indexes, glUsage);
glState.currentVao = vao;
@@ -304,7 +304,7 @@ vao_t *R_CreateVao2(const char *name, int numVertexes, srfVert_t *verts, int num
int dataSize;
int dataOfs;
- int glUsage = GL_STATIC_DRAW_ARB;
+ int glUsage = GL_STATIC_DRAW;
if(!numVertexes || !numIndexes)
return NULL;
@@ -422,19 +422,19 @@ vao_t *R_CreateVao2(const char *name, int numVertexes, srfVert_t *verts, int num
vao->vertexesSize = dataSize;
- qglGenBuffersARB(1, &vao->vertexesVBO);
+ qglGenBuffers(1, &vao->vertexesVBO);
- qglBindBufferARB(GL_ARRAY_BUFFER_ARB, vao->vertexesVBO);
- qglBufferDataARB(GL_ARRAY_BUFFER_ARB, vao->vertexesSize, data, glUsage);
+ qglBindBuffer(GL_ARRAY_BUFFER, vao->vertexesVBO);
+ qglBufferData(GL_ARRAY_BUFFER, vao->vertexesSize, data, glUsage);
// create IBO
vao->indexesSize = numIndexes * sizeof(glIndex_t);
- qglGenBuffersARB(1, &vao->indexesIBO);
+ qglGenBuffers(1, &vao->indexesIBO);
- qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vao->indexesIBO);
- qglBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vao->indexesSize, indexes, glUsage);
+ qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao->indexesIBO);
+ qglBufferData(GL_ELEMENT_ARRAY_BUFFER, vao->indexesSize, indexes, glUsage);
Vao_SetVertexPointers(vao);
@@ -484,16 +484,16 @@ void R_BindVao(vao_t * vao)
// why you no save GL_ELEMENT_ARRAY_BUFFER binding, Intel?
if (1)
- qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, vao->indexesIBO);
+ qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao->indexesIBO);
// tess VAO always has buffers bound
if (vao == tess.vao)
- qglBindBufferARB(GL_ARRAY_BUFFER_ARB, vao->vertexesVBO);
+ qglBindBuffer(GL_ARRAY_BUFFER, vao->vertexesVBO);
}
else
{
- qglBindBufferARB(GL_ARRAY_BUFFER_ARB, vao->vertexesVBO);
- qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vao->indexesIBO);
+ qglBindBuffer(GL_ARRAY_BUFFER, vao->vertexesVBO);
+ qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao->indexesIBO);
// tess VAO doesn't have vertex pointers set until data is uploaded
if (vao != tess.vao)
@@ -518,12 +518,12 @@ void R_BindNullVao(void)
qglBindVertexArrayARB(0);
// why you no save GL_ELEMENT_ARRAY_BUFFER binding, Intel?
- if (1) qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
+ if (1) qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
else
{
- qglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
- qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
+ qglBindBuffer(GL_ARRAY_BUFFER, 0);
+ qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
glState.currentVao = NULL;
}
@@ -658,12 +658,12 @@ void R_ShutdownVaos(void)
if(vao->vertexesVBO)
{
- qglDeleteBuffersARB(1, &vao->vertexesVBO);
+ qglDeleteBuffers(1, &vao->vertexesVBO);
}
if(vao->indexesIBO)
{
- qglDeleteBuffersARB(1, &vao->indexesIBO);
+ qglDeleteBuffers(1, &vao->indexesIBO);
}
}
@@ -737,7 +737,7 @@ void RB_UpdateTessVao(unsigned int attribBits)
R_BindVao(tess.vao);
// orphan old vertex buffer so we don't stall on it
- qglBufferDataARB(GL_ARRAY_BUFFER_ARB, tess.vao->vertexesSize, NULL, GL_DYNAMIC_DRAW_ARB);
+ qglBufferData(GL_ARRAY_BUFFER, tess.vao->vertexesSize, NULL, GL_DYNAMIC_DRAW);
// if nothing to set, set everything
if(!(attribBits & ATTR_BITS))
@@ -761,17 +761,17 @@ void RB_UpdateTessVao(unsigned int attribBits)
if (attribUpload & attribBit)
{
// note: tess has a VBO where stride == size
- qglBufferSubDataARB(GL_ARRAY_BUFFER_ARB, vAtb->offset, tess.numVertexes * vAtb->stride, tess.attribPointers[attribIndex]);
+ qglBufferSubData(GL_ARRAY_BUFFER, vAtb->offset, tess.numVertexes * vAtb->stride, tess.attribPointers[attribIndex]);
}
if (attribBits & attribBit)
{
if (!glRefConfig.vertexArrayObject)
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset));
if (!(glState.vertexAttribsEnabled & attribBit))
{
- qglEnableVertexAttribArrayARB(attribIndex);
+ qglEnableVertexAttribArray(attribIndex);
glState.vertexAttribsEnabled |= attribBit;
}
}
@@ -779,15 +779,15 @@ void RB_UpdateTessVao(unsigned int attribBits)
{
if ((glState.vertexAttribsEnabled & attribBit))
{
- qglDisableVertexAttribArrayARB(attribIndex);
+ qglDisableVertexAttribArray(attribIndex);
glState.vertexAttribsEnabled &= ~attribBit;
}
}
}
// orphan old index buffer so we don't stall on it
- qglBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, tess.vao->indexesSize, NULL, GL_DYNAMIC_DRAW_ARB);
+ qglBufferData(GL_ELEMENT_ARRAY_BUFFER, tess.vao->indexesSize, NULL, GL_DYNAMIC_DRAW);
- qglBufferSubDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, tess.numIndexes * sizeof(tess.indexes[0]), tess.indexes);
+ qglBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, tess.numIndexes * sizeof(tess.indexes[0]), tess.indexes);
}
}
diff --git a/SP/code/rend2/qgl.h b/SP/code/rend2/qgl.h
index 7a7898d..b47372e 100644
--- a/SP/code/rend2/qgl.h
+++ b/SP/code/rend2/qgl.h
@@ -453,104 +453,76 @@ extern void ( APIENTRY * qglPNTrianglesfATI )( GLenum pname, GLfloat param );
#define qglVertexPointer glVertexPointer
#define qglViewport glViewport
-// GL_EXT_draw_range_elements
-extern void (APIENTRY * qglDrawRangeElementsEXT) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
-
-// GL_EXT_multi_draw_arrays
-extern void (APIENTRY * qglMultiDrawArraysEXT) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
-extern void (APIENTRY * qglMultiDrawElementsEXT) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount);
-
// rend2
-// GL_ARB_shading_language_100
-#ifndef GL_ARB_shading_language_100
-#define GL_ARB_shading_language_100
-#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C
-#endif
-
-// GL_ARB_vertex_program
-extern void (APIENTRY * qglVertexAttrib4fARB) (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
-extern void (APIENTRY * qglVertexAttrib4fvARB) (GLuint, const GLfloat *);
-extern void (APIENTRY * qglVertexAttribPointerARB) (GLuint index, GLint size, GLenum type, GLboolean normalized,
- GLsizei stride, const GLvoid * pointer);
-extern void (APIENTRY * qglEnableVertexAttribArrayARB) (GLuint index);
-extern void (APIENTRY * qglDisableVertexAttribArrayARB) (GLuint index);
-
-// GL_ARB_vertex_buffer_object
-extern void (APIENTRY * qglBindBufferARB) (GLenum target, GLuint buffer);
-extern void (APIENTRY * qglDeleteBuffersARB) (GLsizei n, const GLuint * buffers);
-extern void (APIENTRY * qglGenBuffersARB) (GLsizei n, GLuint * buffers);
-extern GLboolean(APIENTRY * qglIsBufferARB) (GLuint buffer);
-extern void (APIENTRY * qglBufferDataARB) (GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage);
-extern void (APIENTRY * qglBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data);
-extern void (APIENTRY * qglGetBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data);
-extern void (APIENTRY * qglGetBufferParameterivARB) (GLenum target, GLenum pname, GLint * params);
-extern void (APIENTRY * qglGetBufferPointervARB) (GLenum target, GLenum pname, GLvoid * *params);
-
-// GL_ARB_shader_objects
-extern void (APIENTRY * qglDeleteObjectARB) (GLhandleARB obj);
-extern GLhandleARB(APIENTRY * qglGetHandleARB) (GLenum pname);
-extern void (APIENTRY * qglDetachObjectARB) (GLhandleARB containerObj, GLhandleARB attachedObj);
-extern GLhandleARB(APIENTRY * qglCreateShaderObjectARB) (GLenum shaderType);
-extern void (APIENTRY * qglShaderSourceARB) (GLhandleARB shaderObj, GLsizei count, const GLcharARB * *string,
- const GLint * length);
-extern void (APIENTRY * qglCompileShaderARB) (GLhandleARB shaderObj);
-extern GLhandleARB(APIENTRY * qglCreateProgramObjectARB) (void);
-extern void (APIENTRY * qglAttachObjectARB) (GLhandleARB containerObj, GLhandleARB obj);
-extern void (APIENTRY * qglLinkProgramARB) (GLhandleARB programObj);
-extern void (APIENTRY * qglUseProgramObjectARB) (GLhandleARB programObj);
-extern void (APIENTRY * qglValidateProgramARB) (GLhandleARB programObj);
-extern void (APIENTRY * qglUniform1fARB) (GLint location, GLfloat v0);
-extern void (APIENTRY * qglUniform2fARB) (GLint location, GLfloat v0, GLfloat v1);
-extern void (APIENTRY * qglUniform3fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
-extern void (APIENTRY * qglUniform4fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
-extern void (APIENTRY * qglUniform1iARB) (GLint location, GLint v0);
-extern void (APIENTRY * qglUniform2iARB) (GLint location, GLint v0, GLint v1);
-extern void (APIENTRY * qglUniform3iARB) (GLint location, GLint v0, GLint v1, GLint v2);
-extern void (APIENTRY * qglUniform4iARB) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
-extern void (APIENTRY * qglUniform1fvARB) (GLint location, GLsizei count, const GLfloat * value);
-extern void (APIENTRY * qglUniform2fvARB) (GLint location, GLsizei count, const GLfloat * value);
-extern void (APIENTRY * qglUniform3fvARB) (GLint location, GLsizei count, const GLfloat * value);
-extern void (APIENTRY * qglUniform4fvARB) (GLint location, GLsizei count, const GLfloat * value);
-extern void (APIENTRY * qglUniform2ivARB) (GLint location, GLsizei count, const GLint * value);
-extern void (APIENTRY * qglUniform3ivARB) (GLint location, GLsizei count, const GLint * value);
-extern void (APIENTRY * qglUniform4ivARB) (GLint location, GLsizei count, const GLint * value);
-extern void (APIENTRY * qglUniformMatrix2fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-extern void (APIENTRY * qglUniformMatrix3fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-extern void (APIENTRY * qglUniformMatrix4fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-extern void (APIENTRY * qglGetObjectParameterfvARB) (GLhandleARB obj, GLenum pname, GLfloat * params);
-extern void (APIENTRY * qglGetObjectParameterivARB) (GLhandleARB obj, GLenum pname, GLint * params);
-extern void (APIENTRY * qglGetInfoLogARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog);
-extern void (APIENTRY * qglGetAttachedObjectsARB) (GLhandleARB containerObj, GLsizei maxCount, GLsizei * count,
- GLhandleARB * obj);
-extern GLint(APIENTRY * qglGetUniformLocationARB) (GLhandleARB programObj, const GLcharARB * name);
-extern void (APIENTRY * qglGetActiveUniformARB) (GLhandleARB programObj, GLuint index, GLsizei maxIndex, GLsizei * length,
- GLint * size, GLenum * type, GLcharARB * name);
-extern void (APIENTRY * qglGetUniformfvARB) (GLhandleARB programObj, GLint location, GLfloat * params);
-extern void (APIENTRY * qglGetUniformivARB) (GLhandleARB programObj, GLint location, GLint * params);
-extern void (APIENTRY * qglGetShaderSourceARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source);
-
-// GL_ARB_vertex_shader
-extern void (APIENTRY * qglBindAttribLocationARB) (GLhandleARB programObj, GLuint index, const GLcharARB * name);
-extern void (APIENTRY * qglGetActiveAttribARB) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length,
- GLint * size, GLenum * type, GLcharARB * name);
-extern GLint(APIENTRY * qglGetAttribLocationARB) (GLhandleARB programObj, const GLcharARB * name);
-
-// GL_ARB_texture_compression
-extern void (APIENTRY * qglCompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
- GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglCompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
- GLint border, GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglCompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border,
- GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglCompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
- GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglCompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglCompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format,
- GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglGetCompressedTexImageARB)(GLenum target, GLint lod,
- GLvoid *img);
+// GL function loader, based on https://gist.github.com/rygorous/16796a0c876cf8a5f542caddb55bce8a
+
+ // OpenGL 1.2, was GL_EXT_draw_range_elements
+#define QGL_1_2_PROCS \
+ GLE(void, DrawRangeElements, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices) \
+
+ // OpenGL 1.3, was GL_ARB_texture_compression
+#define QGL_1_3_PROCS \
+ GLE(void, CompressedTexImage2D, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data) \
+ GLE(void, CompressedTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data) \
+
+ // OpenGL 1.4, was GL_EXT_multi_draw_arrays
+#define QGL_1_4_PROCS \
+ GLE(void, MultiDrawElements, GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount) \
+
+ // OpenGL 1.5, was GL_ARB_vertex_buffer_object and GL_ARB_occlusion_query
+#define QGL_1_5_PROCS \
+ GLE(void, GenQueries, GLsizei n, GLuint *ids) \
+ GLE(void, DeleteQueries, GLsizei n, const GLuint *ids) \
+ GLE(void, BeginQuery, GLenum target, GLuint id) \
+ GLE(void, EndQuery, GLenum target) \
+ GLE(void, GetQueryObjectiv, GLuint id, GLenum pname, GLint *params) \
+ GLE(void, GetQueryObjectuiv, GLuint id, GLenum pname, GLuint *params) \
+ GLE(void, BindBuffer, GLenum target, GLuint buffer) \
+ GLE(void, DeleteBuffers, GLsizei n, const GLuint *buffers) \
+ GLE(void, GenBuffers, GLsizei n, GLuint *buffers) \
+ GLE(void, BufferData, GLenum target, GLsizeiptr size, const void *data, GLenum usage) \
+ GLE(void, BufferSubData, GLenum target, GLintptr offset, GLsizeiptr size, const void *data) \
+
+ // OpenGL 2.0, was GL_ARB_shading_language_100, GL_ARB_vertex_program, GL_ARB_shader_objects, and GL_ARB_vertex_shader
+#define QGL_2_0_PROCS \
+ GLE(void, AttachShader, GLuint program, GLuint shader) \
+ GLE(void, BindAttribLocation, GLuint program, GLuint index, const GLchar *name) \
+ GLE(void, CompileShader, GLuint shader) \
+ GLE(GLuint, CreateProgram, void) \
+ GLE(GLuint, CreateShader, GLenum type) \
+ GLE(void, DeleteProgram, GLuint program) \
+ GLE(void, DeleteShader, GLuint shader) \
+ GLE(void, DetachShader, GLuint program, GLuint shader) \
+ GLE(void, DisableVertexAttribArray, GLuint index) \
+ GLE(void, EnableVertexAttribArray, GLuint index) \
+ GLE(void, GetActiveUniform, GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name) \
+ GLE(void, GetProgramiv, GLuint program, GLenum pname, GLint *params) \
+ GLE(void, GetProgramInfoLog, GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog) \
+ GLE(void, GetShaderiv, GLuint shader, GLenum pname, GLint *params) \
+ GLE(void, GetShaderInfoLog, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog) \
+ GLE(void, GetShaderSource, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source) \
+ GLE(GLint, GetUniformLocation, GLuint program, const GLchar *name) \
+ GLE(void, LinkProgram, GLuint program) \
+ GLE(void, ShaderSource, GLuint shader, GLsizei count, const GLchar* *string, const GLint *length) \
+ GLE(void, UseProgram, GLuint program) \
+ GLE(void, Uniform1f, GLint location, GLfloat v0) \
+ GLE(void, Uniform2f, GLint location, GLfloat v0, GLfloat v1) \
+ GLE(void, Uniform3f, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) \
+ GLE(void, Uniform4f, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) \
+ GLE(void, Uniform1i, GLint location, GLint v0) \
+ GLE(void, Uniform1fv, GLint location, GLsizei count, const GLfloat *value) \
+ GLE(void, UniformMatrix4fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) \
+ 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
@@ -687,25 +659,6 @@ extern void (APIENTRY * qglGenerateMipmapEXT)(GLenum target);
#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1
#endif
-// GL_ARB_occlusion_query
-extern void (APIENTRY * qglGenQueriesARB)(GLsizei n, GLuint *ids);
-extern void (APIENTRY * qglDeleteQueriesARB)(GLsizei n, const GLuint *ids);
-extern GLboolean (APIENTRY * qglIsQueryARB)(GLuint id);
-extern void (APIENTRY * qglBeginQueryARB)(GLenum target, GLuint id);
-extern void (APIENTRY * qglEndQueryARB)(GLenum target);
-extern void (APIENTRY * qglGetQueryivARB)(GLenum target, GLenum pname, GLint *params);
-extern void (APIENTRY * qglGetQueryObjectivARB)(GLuint id, GLenum pname, GLint *params);
-extern void (APIENTRY * qglGetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint *params);
-
-#ifndef GL_ARB_occlusion_query
-#define GL_ARB_occlusion_query
-#define GL_SAMPLES_PASSED_ARB 0x8914
-#define GL_QUERY_COUNTER_BITS_ARB 0x8864
-#define GL_CURRENT_QUERY_ARB 0x8865
-#define GL_QUERY_RESULT_ARB 0x8866
-#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867
-#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,
diff --git a/SP/code/rend2/tr_backend.c b/SP/code/rend2/tr_backend.c
index 0fcc537..e5b7ca3 100644
--- a/SP/code/rend2/tr_backend.c
+++ b/SP/code/rend2/tr_backend.c
@@ -1069,7 +1069,7 @@ void RB_RenderDrawSurfList( drawSurf_t *drawSurfs, int numDrawSurfs ) {
R_TransformDlights( backEnd.refdef.num_dlights, backEnd.refdef.dlights, &backEnd.or );
if (inQuery) {
- qglEndQueryARB(GL_SAMPLES_PASSED_ARB);
+ qglEndQuery(GL_SAMPLES_PASSED);
}
if (glRefConfig.framebufferObject)
@@ -1715,14 +1715,14 @@ const void *RB_DrawSurfs( const void *data ) {
if (glRefConfig.occlusionQuery)
{
tr.sunFlareQueryActive[tr.sunFlareQueryIndex] = qtrue;
- qglBeginQueryARB(GL_SAMPLES_PASSED_ARB, tr.sunFlareQuery[tr.sunFlareQueryIndex]);
+ qglBeginQuery(GL_SAMPLES_PASSED, tr.sunFlareQuery[tr.sunFlareQueryIndex]);
}
RB_DrawSun(0.3, tr.sunFlareShader);
if (glRefConfig.occlusionQuery)
{
- qglEndQueryARB(GL_SAMPLES_PASSED_ARB);
+ qglEndQuery(GL_SAMPLES_PASSED);
}
FBO_Bind(oldFbo);
diff --git a/SP/code/rend2/tr_dsa.c b/SP/code/rend2/tr_dsa.c
index 9cd481b..4ea7699 100644
--- a/SP/code/rend2/tr_dsa.c
+++ b/SP/code/rend2/tr_dsa.c
@@ -124,7 +124,7 @@ GLvoid APIENTRY GLDSA_CompressedTextureImage2D(GLuint texture, GLenum target, G
GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
- qglCompressedTexImage2DARB(target, level, internalformat, width, height, border, imageSize, data);
+ qglCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
}
GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLint level,
@@ -132,7 +132,7 @@ GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target,
GLsizei imageSize, const GLvoid *data)
{
GL_BindMultiTexture(glDsaState.texunit, target, texture);
- qglCompressedTexSubImage2DARB(target, level, xoffset, yoffset, width, height, format, imageSize, data);
+ qglCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
}
GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target)
@@ -143,66 +143,66 @@ GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target)
void GL_BindNullProgram()
{
- qglUseProgramObjectARB(0);
+ qglUseProgram(0);
glDsaState.program = 0;
}
-int GL_UseProgramObject(GLuint program)
+int GL_UseProgram(GLuint program)
{
if (glDsaState.program == program)
return 0;
- qglUseProgramObjectARB(program);
+ qglUseProgram(program);
glDsaState.program = program;
return 1;
}
GLvoid APIENTRY GLDSA_ProgramUniform1i(GLuint program, GLint location, GLint v0)
{
- GL_UseProgramObject(program);
- qglUniform1iARB(location, v0);
+ GL_UseProgram(program);
+ qglUniform1i(location, v0);
}
GLvoid APIENTRY GLDSA_ProgramUniform1f(GLuint program, GLint location, GLfloat v0)
{
- GL_UseProgramObject(program);
- qglUniform1fARB(location, v0);
+ GL_UseProgram(program);
+ qglUniform1f(location, v0);
}
GLvoid APIENTRY GLDSA_ProgramUniform2f(GLuint program, GLint location,
GLfloat v0, GLfloat v1)
{
- GL_UseProgramObject(program);
- qglUniform2fARB(location, v0, v1);
+ GL_UseProgram(program);
+ qglUniform2f(location, v0, v1);
}
GLvoid APIENTRY GLDSA_ProgramUniform3f(GLuint program, GLint location,
GLfloat v0, GLfloat v1, GLfloat v2)
{
- GL_UseProgramObject(program);
- qglUniform3fARB(location, v0, v1, v2);
+ GL_UseProgram(program);
+ qglUniform3f(location, v0, v1, v2);
}
GLvoid APIENTRY GLDSA_ProgramUniform4f(GLuint program, GLint location,
GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
{
- GL_UseProgramObject(program);
- qglUniform4fARB(location, v0, v1, v2, v3);
+ GL_UseProgram(program);
+ qglUniform4f(location, v0, v1, v2, v3);
}
GLvoid APIENTRY GLDSA_ProgramUniform1fv(GLuint program, GLint location,
GLsizei count, const GLfloat *value)
{
- GL_UseProgramObject(program);
- qglUniform1fvARB(location, count, value);
+ GL_UseProgram(program);
+ qglUniform1fv(location, count, value);
}
GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fv(GLuint program, GLint location,
GLsizei count, GLboolean transpose,
const GLfloat *value)
{
- GL_UseProgramObject(program);
- qglUniformMatrix4fvARB(location, count, transpose, value);
+ GL_UseProgram(program);
+ qglUniformMatrix4fv(location, count, transpose, value);
}
void GL_BindNullFramebuffers()
diff --git a/SP/code/rend2/tr_dsa.h b/SP/code/rend2/tr_dsa.h
index 9d610ef..f57944d 100644
--- a/SP/code/rend2/tr_dsa.h
+++ b/SP/code/rend2/tr_dsa.h
@@ -44,7 +44,7 @@ GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target,
GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target);
void GL_BindNullProgram(void);
-int GL_UseProgramObject(GLuint program);
+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);
diff --git a/SP/code/rend2/tr_extensions.c b/SP/code/rend2/tr_extensions.c
index 9c3b7a4..3aa6ecc 100644
--- a/SP/code/rend2/tr_extensions.c
+++ b/SP/code/rend2/tr_extensions.c
@@ -30,101 +30,13 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "tr_local.h"
#include "tr_dsa.h"
-// GL_EXT_draw_range_elements
-void (APIENTRY * qglDrawRangeElementsEXT) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
-
-// GL_EXT_multi_draw_arrays
-void (APIENTRY * qglMultiDrawArraysEXT) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
-void (APIENTRY * qglMultiDrawElementsEXT) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount);
-
-// GL_ARB_vertex_shader
-void (APIENTRY * qglBindAttribLocationARB) (GLhandleARB programObj, GLuint index, const GLcharARB * name);
-void (APIENTRY * qglGetActiveAttribARB) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length,
- GLint * size, GLenum * type, GLcharARB * name);
-GLint(APIENTRY * qglGetAttribLocationARB) (GLhandleARB programObj, const GLcharARB * name);
-
-// GL_ARB_vertex_program
-void (APIENTRY * qglVertexAttrib4fARB) (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
-void (APIENTRY * qglVertexAttrib4fvARB) (GLuint, const GLfloat *);
-void (APIENTRY * qglVertexAttribPointerARB) (GLuint index, GLint size, GLenum type, GLboolean normalized,
- GLsizei stride, const GLvoid * pointer);
-void (APIENTRY * qglEnableVertexAttribArrayARB) (GLuint index);
-void (APIENTRY * qglDisableVertexAttribArrayARB) (GLuint index);
-
-// GL_ARB_vertex_buffer_object
-void (APIENTRY * qglBindBufferARB) (GLenum target, GLuint buffer);
-void (APIENTRY * qglDeleteBuffersARB) (GLsizei n, const GLuint * buffers);
-void (APIENTRY * qglGenBuffersARB) (GLsizei n, GLuint * buffers);
-
-GLboolean(APIENTRY * qglIsBufferARB) (GLuint buffer);
-void (APIENTRY * qglBufferDataARB) (GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage);
-void (APIENTRY * qglBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data);
-void (APIENTRY * qglGetBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data);
-
-void (APIENTRY * qglGetBufferParameterivARB) (GLenum target, GLenum pname, GLint * params);
-void (APIENTRY * qglGetBufferPointervARB) (GLenum target, GLenum pname, GLvoid * *params);
-
-// GL_ARB_shader_objects
-void (APIENTRY * qglDeleteObjectARB) (GLhandleARB obj);
-
-GLhandleARB(APIENTRY * qglGetHandleARB) (GLenum pname);
-void (APIENTRY * qglDetachObjectARB) (GLhandleARB containerObj, GLhandleARB attachedObj);
-
-GLhandleARB(APIENTRY * qglCreateShaderObjectARB) (GLenum shaderType);
-void (APIENTRY * qglShaderSourceARB) (GLhandleARB shaderObj, GLsizei count, const GLcharARB * *string,
- const GLint * length);
-void (APIENTRY * qglCompileShaderARB) (GLhandleARB shaderObj);
-
-GLhandleARB(APIENTRY * qglCreateProgramObjectARB) (void);
-void (APIENTRY * qglAttachObjectARB) (GLhandleARB containerObj, GLhandleARB obj);
-void (APIENTRY * qglLinkProgramARB) (GLhandleARB programObj);
-void (APIENTRY * qglUseProgramObjectARB) (GLhandleARB programObj);
-void (APIENTRY * qglValidateProgramARB) (GLhandleARB programObj);
-void (APIENTRY * qglUniform1fARB) (GLint location, GLfloat v0);
-void (APIENTRY * qglUniform2fARB) (GLint location, GLfloat v0, GLfloat v1);
-void (APIENTRY * qglUniform3fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
-void (APIENTRY * qglUniform4fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
-void (APIENTRY * qglUniform1iARB) (GLint location, GLint v0);
-void (APIENTRY * qglUniform2iARB) (GLint location, GLint v0, GLint v1);
-void (APIENTRY * qglUniform3iARB) (GLint location, GLint v0, GLint v1, GLint v2);
-void (APIENTRY * qglUniform4iARB) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
-void (APIENTRY * qglUniform1fvARB) (GLint location, GLsizei count, const GLfloat * value);
-void (APIENTRY * qglUniform2fvARB) (GLint location, GLsizei count, const GLfloat * value);
-void (APIENTRY * qglUniform3fvARB) (GLint location, GLsizei count, const GLfloat * value);
-void (APIENTRY * qglUniform4fvARB) (GLint location, GLsizei count, const GLfloat * value);
-void (APIENTRY * qglUniform2ivARB) (GLint location, GLsizei count, const GLint * value);
-void (APIENTRY * qglUniform3ivARB) (GLint location, GLsizei count, const GLint * value);
-void (APIENTRY * qglUniform4ivARB) (GLint location, GLsizei count, const GLint * value);
-void (APIENTRY * qglUniformMatrix2fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-void (APIENTRY * qglUniformMatrix3fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-void (APIENTRY * qglUniformMatrix4fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-void (APIENTRY * qglGetObjectParameterfvARB) (GLhandleARB obj, GLenum pname, GLfloat * params);
-void (APIENTRY * qglGetObjectParameterivARB) (GLhandleARB obj, GLenum pname, GLint * params);
-void (APIENTRY * qglGetInfoLogARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog);
-void (APIENTRY * qglGetAttachedObjectsARB) (GLhandleARB containerObj, GLsizei maxCount, GLsizei * count,
- GLhandleARB * obj);
-GLint(APIENTRY * qglGetUniformLocationARB) (GLhandleARB programObj, const GLcharARB * name);
-void (APIENTRY * qglGetActiveUniformARB) (GLhandleARB programObj, GLuint index, GLsizei maxIndex, GLsizei * length,
- GLint * size, GLenum * type, GLcharARB * name);
-void (APIENTRY * qglGetUniformfvARB) (GLhandleARB programObj, GLint location, GLfloat * params);
-void (APIENTRY * qglGetUniformivARB) (GLhandleARB programObj, GLint location, GLint * params);
-void (APIENTRY * qglGetShaderSourceARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source);
-
-// GL_ARB_texture_compression
-void (APIENTRY * qglCompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
- GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
-void (APIENTRY * qglCompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
- GLint border, GLsizei imageSize, const GLvoid *data);
-void (APIENTRY * qglCompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border,
- GLsizei imageSize, const GLvoid *data);
-void (APIENTRY * qglCompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
- GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
-void (APIENTRY * qglCompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
-void (APIENTRY * qglCompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format,
- GLsizei imageSize, const GLvoid *data);
-void (APIENTRY * qglGetCompressedTexImageARB)(GLenum target, GLint lod,
- GLvoid *img);
+#define GLE(ret, name, ...) 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_EXT_framebuffer_object
GLboolean (APIENTRY * qglIsRenderbufferEXT)(GLuint renderbuffer);
@@ -157,16 +69,6 @@ void (APIENTRY * qglGetFramebufferAttachmentParameterivEXT)(GLenum target, GLenu
void (APIENTRY * qglGenerateMipmapEXT)(GLenum target);
-// GL_ARB_occlusion_query
-void (APIENTRY * qglGenQueriesARB)(GLsizei n, GLuint *ids);
-void (APIENTRY * qglDeleteQueriesARB)(GLsizei n, const GLuint *ids);
-GLboolean (APIENTRY * qglIsQueryARB)(GLuint id);
-void (APIENTRY * qglBeginQueryARB)(GLenum target, GLuint id);
-void (APIENTRY * qglEndQueryARB)(GLenum target);
-void (APIENTRY * qglGetQueryivARB)(GLenum target, GLenum pname, GLint *params);
-void (APIENTRY * qglGetQueryObjectivARB)(GLuint id, GLenum pname, GLint *params);
-void (APIENTRY * qglGetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint *params);
-
// GL_EXT_framebuffer_blit
void (APIENTRY * qglBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
@@ -240,248 +142,47 @@ void GLimp_InitExtraExtensions()
char *extension;
const char* result[3] = { "...ignoring %s\n", "...using %s\n", "...%s not found\n" };
- // GL_EXT_draw_range_elements
- extension = "GL_EXT_draw_range_elements";
- glRefConfig.drawRangeElements = qfalse;
- qglMultiDrawArraysEXT = NULL;
- qglMultiDrawElementsEXT = NULL;
- if( GLimp_HaveExtension( extension ) )
- {
- qglDrawRangeElementsEXT = (void *) SDL_GL_GetProcAddress("glDrawRangeElementsEXT");
-
- if ( r_ext_draw_range_elements->integer)
- glRefConfig.drawRangeElements = qtrue;
-
- ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], extension);
- }
- else
- {
- ri.Printf(PRINT_ALL, result[2], extension);
- }
-
- // GL_EXT_multi_draw_arrays
- extension = "GL_EXT_multi_draw_arrays";
- glRefConfig.multiDrawArrays = qfalse;
- qglMultiDrawArraysEXT = NULL;
- qglMultiDrawElementsEXT = NULL;
- if( GLimp_HaveExtension( extension ) )
- {
- qglMultiDrawArraysEXT = (PFNGLMULTIDRAWARRAYSEXTPROC) SDL_GL_GetProcAddress("glMultiDrawArraysEXT");
- qglMultiDrawElementsEXT = (PFNGLMULTIDRAWELEMENTSEXTPROC) SDL_GL_GetProcAddress("glMultiDrawElementsEXT");
-
- if ( r_ext_multi_draw_arrays->integer )
- glRefConfig.multiDrawArrays = qtrue;
-
- ri.Printf(PRINT_ALL, result[glRefConfig.multiDrawArrays], extension);
- }
- else
- {
- ri.Printf(PRINT_ALL, result[2], extension);
- }
+ 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_ARB_vertex_program
- //glRefConfig.vertexProgram = qfalse;
- extension = "GL_ARB_vertex_program";
- qglVertexAttrib4fARB = NULL;
- qglVertexAttrib4fvARB = NULL;
- qglVertexAttribPointerARB = NULL;
- qglEnableVertexAttribArrayARB = NULL;
- qglDisableVertexAttribArrayARB = NULL;
- if( GLimp_HaveExtension( extension ) )
- {
- qglVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC) SDL_GL_GetProcAddress("glVertexAttrib4fARB");
- qglVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC) SDL_GL_GetProcAddress("glVertexAttrib4fvARB");
- qglVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC) SDL_GL_GetProcAddress("glVertexAttribPointerARB");
- qglEnableVertexAttribArrayARB =
- (PFNGLENABLEVERTEXATTRIBARRAYARBPROC) SDL_GL_GetProcAddress("glEnableVertexAttribArrayARB");
- qglDisableVertexAttribArrayARB =
- (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) SDL_GL_GetProcAddress("glDisableVertexAttribArrayARB");
-
- ri.Printf(PRINT_ALL, result[1], extension);
- //glRefConfig.vertexProgram = qtrue;
- }
- else
- {
- ri.Error(ERR_FATAL, result[2], extension);
- }
-
- // GL_ARB_vertex_buffer_object
- //glRefConfig.vertexBufferObject = qfalse;
- extension = "GL_ARB_vertex_buffer_object";
- qglBindBufferARB = NULL;
- qglDeleteBuffersARB = NULL;
- qglGenBuffersARB = NULL;
- qglIsBufferARB = NULL;
- qglBufferDataARB = NULL;
- qglBufferSubDataARB = NULL;
- qglGetBufferSubDataARB = NULL;
- qglGetBufferParameterivARB = NULL;
- qglGetBufferPointervARB = NULL;
- if( GLimp_HaveExtension( extension ) )
- {
- qglBindBufferARB = (PFNGLBINDBUFFERARBPROC) SDL_GL_GetProcAddress("glBindBufferARB");
- qglDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC) SDL_GL_GetProcAddress("glDeleteBuffersARB");
- qglGenBuffersARB = (PFNGLGENBUFFERSARBPROC) SDL_GL_GetProcAddress("glGenBuffersARB");
- qglIsBufferARB = (PFNGLISBUFFERARBPROC) SDL_GL_GetProcAddress("glIsBufferARB");
- qglBufferDataARB = (PFNGLBUFFERDATAARBPROC) SDL_GL_GetProcAddress("glBufferDataARB");
- qglBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC) SDL_GL_GetProcAddress("glBufferSubDataARB");
- qglGetBufferSubDataARB = (PFNGLGETBUFFERSUBDATAARBPROC) SDL_GL_GetProcAddress("glGetBufferSubDataARB");
- qglGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC) SDL_GL_GetProcAddress("glGetBufferParameterivARB");
- qglGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC) SDL_GL_GetProcAddress("glGetBufferPointervARB");
- ri.Printf(PRINT_ALL, result[1], extension);
- //glRefConfig.vertexBufferObject = qtrue;
- }
- else
- {
- ri.Error(ERR_FATAL, result[2], extension);
- }
-
- // GL_ARB_shader_objects
- extension = "GL_ARB_shader_objects";
- //glRefConfig.shaderObjects = qfalse;
- qglDeleteObjectARB = NULL;
- qglGetHandleARB = NULL;
- qglDetachObjectARB = NULL;
- qglCreateShaderObjectARB = NULL;
- qglShaderSourceARB = NULL;
- qglCompileShaderARB = NULL;
- qglCreateProgramObjectARB = NULL;
- qglAttachObjectARB = NULL;
- qglLinkProgramARB = NULL;
- qglUseProgramObjectARB = NULL;
- qglValidateProgramARB = NULL;
- qglUniform1fARB = NULL;
- qglUniform2fARB = NULL;
- qglUniform3fARB = NULL;
- qglUniform4fARB = NULL;
- qglUniform1iARB = NULL;
- qglUniform2iARB = NULL;
- qglUniform3iARB = NULL;
- qglUniform4iARB = NULL;
- qglUniform1fvARB = NULL;
- qglUniform2fvARB = NULL;
- qglUniform3fvARB = NULL;
- qglUniform4fvARB = NULL;
- qglUniform2ivARB = NULL;
- qglUniform3ivARB = NULL;
- qglUniform4ivARB = NULL;
- qglUniformMatrix2fvARB = NULL;
- qglUniformMatrix3fvARB = NULL;
- qglUniformMatrix4fvARB = NULL;
- qglGetObjectParameterfvARB = NULL;
- qglGetObjectParameterivARB = NULL;
- qglGetInfoLogARB = NULL;
- qglGetAttachedObjectsARB = NULL;
- qglGetUniformLocationARB = NULL;
- qglGetActiveUniformARB = NULL;
- qglGetUniformfvARB = NULL;
- qglGetUniformivARB = NULL;
- qglGetShaderSourceARB = NULL;
- if( GLimp_HaveExtension( extension ) )
- {
- qglDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC) SDL_GL_GetProcAddress("glDeleteObjectARB");
- qglGetHandleARB = (PFNGLGETHANDLEARBPROC) SDL_GL_GetProcAddress("glGetHandleARB");
- qglDetachObjectARB = (PFNGLDETACHOBJECTARBPROC) SDL_GL_GetProcAddress("glDetachObjectARB");
- qglCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC) SDL_GL_GetProcAddress("glCreateShaderObjectARB");
- qglShaderSourceARB = (PFNGLSHADERSOURCEARBPROC) SDL_GL_GetProcAddress("glShaderSourceARB");
- qglCompileShaderARB = (PFNGLCOMPILESHADERARBPROC) SDL_GL_GetProcAddress("glCompileShaderARB");
- qglCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC) SDL_GL_GetProcAddress("glCreateProgramObjectARB");
- qglAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) SDL_GL_GetProcAddress("glAttachObjectARB");
- qglLinkProgramARB = (PFNGLLINKPROGRAMARBPROC) SDL_GL_GetProcAddress("glLinkProgramARB");
- qglUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) SDL_GL_GetProcAddress("glUseProgramObjectARB");
- qglValidateProgramARB = (PFNGLVALIDATEPROGRAMARBPROC) SDL_GL_GetProcAddress("glValidateProgramARB");
- qglUniform1fARB = (PFNGLUNIFORM1FARBPROC) SDL_GL_GetProcAddress("glUniform1fARB");
- qglUniform2fARB = (PFNGLUNIFORM2FARBPROC) SDL_GL_GetProcAddress("glUniform2fARB");
- qglUniform3fARB = (PFNGLUNIFORM3FARBPROC) SDL_GL_GetProcAddress("glUniform3fARB");
- qglUniform4fARB = (PFNGLUNIFORM4FARBPROC) SDL_GL_GetProcAddress("glUniform4fARB");
- qglUniform1iARB = (PFNGLUNIFORM1IARBPROC) SDL_GL_GetProcAddress("glUniform1iARB");
- qglUniform2iARB = (PFNGLUNIFORM2IARBPROC) SDL_GL_GetProcAddress("glUniform2iARB");
- qglUniform3iARB = (PFNGLUNIFORM3IARBPROC) SDL_GL_GetProcAddress("glUniform3iARB");
- qglUniform4iARB = (PFNGLUNIFORM4IARBPROC) SDL_GL_GetProcAddress("glUniform4iARB");
- qglUniform1fvARB = (PFNGLUNIFORM1FVARBPROC) SDL_GL_GetProcAddress("glUniform1fvARB");
- qglUniform2fvARB = (PFNGLUNIFORM2FVARBPROC) SDL_GL_GetProcAddress("glUniform2fvARB");
- qglUniform3fvARB = (PFNGLUNIFORM3FVARBPROC) SDL_GL_GetProcAddress("glUniform3fvARB");
- qglUniform4fvARB = (PFNGLUNIFORM4FVARBPROC) SDL_GL_GetProcAddress("glUniform4fvARB");
- qglUniform2ivARB = (PFNGLUNIFORM2IVARBPROC) SDL_GL_GetProcAddress("glUniform2ivARB");
- qglUniform3ivARB = (PFNGLUNIFORM3IVARBPROC) SDL_GL_GetProcAddress("glUniform3ivARB");
- qglUniform4ivARB = (PFNGLUNIFORM4IVARBPROC) SDL_GL_GetProcAddress("glUniform4ivARB");
- qglUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC) SDL_GL_GetProcAddress("glUniformMatrix2fvARB");
- qglUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC) SDL_GL_GetProcAddress("glUniformMatrix3fvARB");
- qglUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC) SDL_GL_GetProcAddress("glUniformMatrix4fvARB");
- qglGetObjectParameterfvARB = (PFNGLGETOBJECTPARAMETERFVARBPROC) SDL_GL_GetProcAddress("glGetObjectParameterfvARB");
- qglGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC) SDL_GL_GetProcAddress("glGetObjectParameterivARB");
- qglGetInfoLogARB = (PFNGLGETINFOLOGARBPROC) SDL_GL_GetProcAddress("glGetInfoLogARB");
- qglGetAttachedObjectsARB = (PFNGLGETATTACHEDOBJECTSARBPROC) SDL_GL_GetProcAddress("glGetAttachedObjectsARB");
- qglGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC) SDL_GL_GetProcAddress("glGetUniformLocationARB");
- qglGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC) SDL_GL_GetProcAddress("glGetActiveUniformARB");
- qglGetUniformfvARB = (PFNGLGETUNIFORMFVARBPROC) SDL_GL_GetProcAddress("glGetUniformfvARB");
- qglGetUniformivARB = (PFNGLGETUNIFORMIVARBPROC) SDL_GL_GetProcAddress("glGetUniformivARB");
- qglGetShaderSourceARB = (PFNGLGETSHADERSOURCEARBPROC) SDL_GL_GetProcAddress("glGetShaderSourceARB");
- ri.Printf(PRINT_ALL, result[1], extension);
- //glRefConfig.shaderObjects = qtrue;
- }
- else
- {
- ri.Error(ERR_FATAL, result[2], extension);
- }
+ // GL function loader, based on https://gist.github.com/rygorous/16796a0c876cf8a5f542caddb55bce8a
- // GL_ARB_vertex_shader
- //glRefConfig.vertexShader = qfalse;
- extension = "GL_ARB_vertex_shader";
- qglBindAttribLocationARB = NULL;
- qglGetActiveAttribARB = NULL;
- qglGetAttribLocationARB = NULL;
- if( GLimp_HaveExtension( extension ) )
- {
- //int reservedComponents;
+#define GLE(ret, name, ...) qgl##name = (name##proc *) SDL_GL_GetProcAddress("gl" #name);
- //qglGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, &glConfig.maxVertexUniforms);
- //qglGetIntegerv(GL_MAX_VARYING_FLOATS_ARB, &glConfig.maxVaryingFloats);
- //qglGetIntegerv(GL_MAX_VERTEX_ATTRIBS_ARB, &glConfig.maxVertexAttribs);
+ // OpenGL 1.2, was GL_EXT_draw_range_elements
+ QGL_1_2_PROCS;
+ glRefConfig.drawRangeElements = r_ext_draw_range_elements->integer ? qtrue : qfalse;
+ ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], "glDrawRangeElements()");
- //reservedComponents = 16 * 10; // approximation how many uniforms we have besides the bone matrices
+ // OpenGL 1.3, was GL_ARB_texture_compression
+ QGL_1_3_PROCS;
-#if 0
- if(glConfig.driverType == GLDRV_MESA)
- {
- // HACK
- // restrict to number of vertex uniforms to 512 because of:
- // xreal.x86_64: nv50_program.c:4181: nv50_program_validate_data: Assertion `p->param_nr <= 512' failed
+ // 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()");
- glConfig.maxVertexUniforms = Q_bound(0, glConfig.maxVertexUniforms, 512);
- }
-#endif
+ // OpenGL 1.5, was GL_ARB_vertex_buffer_object and GL_ARB_occlusion_query
+ QGL_1_5_PROCS;
+ glRefConfig.occlusionQuery = qtrue;
- //glConfig.maxVertexSkinningBones = (int) Q_bound(0.0, (Q_max(glConfig.maxVertexUniforms - reservedComponents, 0) / 16), MAX_BONES);
- //glConfig.vboVertexSkinningAvailable = r_vboVertexSkinning->integer && ((glConfig.maxVertexSkinningBones >= 12) ? qtrue : qfalse);
+ // 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;
- qglBindAttribLocationARB = (PFNGLBINDATTRIBLOCATIONARBPROC) SDL_GL_GetProcAddress("glBindAttribLocationARB");
- qglGetActiveAttribARB = (PFNGLGETACTIVEATTRIBARBPROC) SDL_GL_GetProcAddress("glGetActiveAttribARB");
- qglGetAttribLocationARB = (PFNGLGETATTRIBLOCATIONARBPROC) SDL_GL_GetProcAddress("glGetAttribLocationARB");
- ri.Printf(PRINT_ALL, result[1], extension);
- //glRefConfig.vertexShader = qtrue;
- }
- else
- {
- ri.Error(ERR_FATAL, result[2], extension);
- }
+#undef GLE
- // GL_ARB_shading_language_100
- extension = "GL_ARB_shading_language_100";
- if( GLimp_HaveExtension( extension ) )
+ if (1)
{
char version[256];
- Q_strncpyz( version, (char *) qglGetString (GL_SHADING_LANGUAGE_VERSION_ARB), sizeof( version ) );
+ Q_strncpyz(version, (char *)qglGetString(GL_SHADING_LANGUAGE_VERSION), sizeof(version));
sscanf(version, "%d.%d", &glRefConfig.glslMajorVersion, &glRefConfig.glslMinorVersion);
ri.Printf(PRINT_ALL, "...using GLSL version %s\n", version);
}
- else
- {
- ri.Error(ERR_FATAL, result[2], extension);
- }
glRefConfig.memInfo = MI_NONE;
@@ -591,27 +292,6 @@ void GLimp_InitExtraExtensions()
ri.Printf(PRINT_ALL, result[2], extension);
}
- // GL_ARB_occlusion_query
- extension = "GL_ARB_occlusion_query";
- glRefConfig.occlusionQuery = qfalse;
- if (GLimp_HaveExtension(extension))
- {
- qglGenQueriesARB = (PFNGLGENQUERIESARBPROC) SDL_GL_GetProcAddress("glGenQueriesARB");
- qglDeleteQueriesARB = (PFNGLDELETEQUERIESARBPROC) SDL_GL_GetProcAddress("glDeleteQueriesARB");
- qglIsQueryARB = (PFNGLISQUERYARBPROC) SDL_GL_GetProcAddress("glIsQueryARB");
- qglBeginQueryARB = (PFNGLBEGINQUERYARBPROC) SDL_GL_GetProcAddress("glBeginQueryARB");
- qglEndQueryARB = (PFNGLENDQUERYARBPROC) SDL_GL_GetProcAddress("glEndQueryARB");
- qglGetQueryivARB = (PFNGLGETQUERYIVARBPROC) SDL_GL_GetProcAddress("glGetQueryivARB");
- qglGetQueryObjectivARB = (PFNGLGETQUERYOBJECTIVARBPROC) SDL_GL_GetProcAddress("glGetQueryObjectivARB");
- qglGetQueryObjectuivARB = (PFNGLGETQUERYOBJECTUIVARBPROC) SDL_GL_GetProcAddress("glGetQueryObjectuivARB");
- glRefConfig.occlusionQuery = qtrue;
- ri.Printf(PRINT_ALL, result[glRefConfig.occlusionQuery], extension);
- }
- else
- {
- ri.Printf(PRINT_ALL, result[2], extension);
- }
-
// GL_EXT_framebuffer_blit
extension = "GL_EXT_framebuffer_blit";
glRefConfig.framebufferBlit = qfalse;
@@ -626,22 +306,6 @@ void GLimp_InitExtraExtensions()
ri.Printf(PRINT_ALL, result[2], extension);
}
- // GL_ARB_texture_compression
- extension = "GL_ARB_texture_compression";
- glRefConfig.arbTextureCompression = qfalse;
- if (GLimp_HaveExtension(extension))
- {
- qglCompressedTexImage3DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexImage3DARB");
- qglCompressedTexImage2DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexImage2DARB");
- qglCompressedTexImage1DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexImage1DARB");
- qglCompressedTexSubImage3DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexSubImage3DARB");
- qglCompressedTexSubImage2DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexSubImage2DARB");
- qglCompressedTexSubImage1DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexSubImage1DARB");
- qglGetCompressedTexImageARB = (void *)SDL_GL_GetProcAddress("glGetCompressedTexImageARB");
- glRefConfig.arbTextureCompression = qtrue;
- ri.Printf(PRINT_ALL, result[glRefConfig.arbTextureCompression], extension);
- }
-
// GL_EXT_framebuffer_multisample
extension = "GL_EXT_framebuffer_multisample";
glRefConfig.framebufferMultisample = qfalse;
@@ -662,7 +326,7 @@ void GLimp_InitExtraExtensions()
extension = "GL_ARB_texture_compression_rgtc";
if (GLimp_HaveExtension(extension))
{
- if (r_ext_compressed_textures->integer && glRefConfig.arbTextureCompression)
+ if (r_ext_compressed_textures->integer)
glRefConfig.textureCompression |= TCR_RGTC;
ri.Printf(PRINT_ALL, result[r_ext_compressed_textures->integer ? 1 : 0], extension);
diff --git a/SP/code/rend2/tr_glsl.c b/SP/code/rend2/tr_glsl.c
index cf2a514..318853a 100644
--- a/SP/code/rend2/tr_glsl.c
+++ b/SP/code/rend2/tr_glsl.c
@@ -153,7 +153,7 @@ static uniformInfo_t uniformsInfo[] =
};
-static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly)
+static void GLSL_PrintInfoLog(GLuint program, qboolean developerOnly)
{
char *msg;
static char msgPart[1024];
@@ -161,7 +161,7 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly)
int i;
int printLevel = developerOnly ? PRINT_DEVELOPER : PRINT_ALL;
- qglGetObjectParameterivARB(object, GL_OBJECT_INFO_LOG_LENGTH_ARB, &maxLength);
+ qglGetProgramiv(program, GL_INFO_LOG_LENGTH, &maxLength);
if (maxLength <= 0)
{
@@ -173,7 +173,7 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly)
if (maxLength < 1023)
{
- qglGetInfoLogARB(object, maxLength, &maxLength, msgPart);
+ qglGetProgramInfoLog(program, maxLength, &maxLength, msgPart);
msgPart[maxLength + 1] = '\0';
@@ -183,7 +183,7 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly)
{
msg = ri.Z_Malloc(maxLength);
- qglGetInfoLogARB(object, maxLength, &maxLength, msg);
+ qglGetProgramInfoLog(program, maxLength, &maxLength, msg);
for(i = 0; i < maxLength; i += 1024)
{
@@ -196,18 +196,18 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly)
}
}
-static void GLSL_PrintShaderSource(GLhandleARB object)
+static void GLSL_PrintShaderSource(GLuint shader)
{
char *msg;
static char msgPart[1024];
int maxLength = 0;
int i;
- qglGetObjectParameterivARB(object, GL_OBJECT_SHADER_SOURCE_LENGTH_ARB, &maxLength);
+ qglGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &maxLength);
msg = ri.Z_Malloc(maxLength);
- qglGetShaderSourceARB(object, maxLength, &maxLength, msg);
+ qglShaderSource(shader, 1, (const GLchar **)&msg, &maxLength);
for(i = 0; i < maxLength; i += 1024)
{
@@ -218,7 +218,7 @@ static void GLSL_PrintShaderSource(GLhandleARB object)
ri.Free(msg);
}
-static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, char *dest, int size )
+static void GLSL_GetShaderHeader( GLenum shaderType, const GLchar *extra, char *dest, int size )
{
float fbufWidthScale, fbufHeightScale;
@@ -229,7 +229,7 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, cha
{
Q_strcat(dest, size, "#version 130\n");
- if(shaderType == GL_VERTEX_SHADER_ARB)
+ if(shaderType == GL_VERTEX_SHADER)
{
Q_strcat(dest, size, "#define attribute in\n");
Q_strcat(dest, size, "#define varying out\n");
@@ -355,20 +355,20 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, cha
Q_strcat(dest, size, "#line 0\n");
}
-static int GLSL_CompileGPUShader(GLhandleARB program, GLhandleARB *prevShader, const GLcharARB *buffer, int size, GLenum shaderType)
+static int GLSL_CompileGPUShader(GLuint program, GLuint *prevShader, const GLchar *buffer, int size, GLenum shaderType)
{
GLint compiled;
- GLhandleARB shader;
+ GLuint shader;
- shader = qglCreateShaderObjectARB(shaderType);
+ shader = qglCreateShader(shaderType);
- qglShaderSourceARB(shader, 1, (const GLcharARB **)&buffer, &size);
+ qglShaderSource(shader, 1, (const GLchar **)&buffer, &size);
// compile shader
- qglCompileShaderARB(shader);
+ qglCompileShader(shader);
// check if shader compiled
- qglGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB, &compiled);
+ qglGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
if(!compiled)
{
GLSL_PrintShaderSource(shader);
@@ -382,12 +382,12 @@ static int GLSL_CompileGPUShader(GLhandleARB program, GLhandleARB *prevShader, c
if (*prevShader)
{
- qglDetachObjectARB(program, *prevShader);
- qglDeleteObjectARB(*prevShader);
+ qglDetachShader(program, *prevShader);
+ qglDeleteShader(*prevShader);
}
// attach shader to program
- qglAttachObjectARB(program, shader);
+ qglAttachShader(program, shader);
*prevShader = shader;
@@ -398,12 +398,12 @@ static int GLSL_LoadGPUShaderText(const char *name, const char *fallback,
GLenum shaderType, char *dest, int destSize)
{
char filename[MAX_QPATH];
- GLcharARB *buffer = NULL;
- const GLcharARB *shaderText = NULL;
+ GLchar *buffer = NULL;
+ const GLchar *shaderText = NULL;
int size;
int result;
- if(shaderType == GL_VERTEX_SHADER_ARB)
+ if(shaderType == GL_VERTEX_SHADER)
{
Com_sprintf(filename, sizeof(filename), "glsl/%s_vp.glsl", name);
}
@@ -457,13 +457,13 @@ static int GLSL_LoadGPUShaderText(const char *name, const char *fallback,
return result;
}
-static void GLSL_LinkProgram(GLhandleARB program)
+static void GLSL_LinkProgram(GLuint program)
{
GLint linked;
- qglLinkProgramARB(program);
+ qglLinkProgram(program);
- qglGetObjectParameterivARB(program, GL_OBJECT_LINK_STATUS_ARB, &linked);
+ qglGetProgramiv(program, GL_LINK_STATUS, &linked);
if(!linked)
{
GLSL_PrintInfoLog(program, qfalse);
@@ -472,13 +472,13 @@ static void GLSL_LinkProgram(GLhandleARB program)
}
}
-static void GLSL_ValidateProgram(GLhandleARB program)
+static void GLSL_ValidateProgram(GLuint program)
{
GLint validated;
- qglValidateProgramARB(program);
+ qglValidateProgram(program);
- qglGetObjectParameterivARB(program, GL_OBJECT_VALIDATE_STATUS_ARB, &validated);
+ qglGetProgramiv(program, GL_VALIDATE_STATUS, &validated);
if(!validated)
{
GLSL_PrintInfoLog(program, qfalse);
@@ -487,19 +487,19 @@ static void GLSL_ValidateProgram(GLhandleARB program)
}
}
-static void GLSL_ShowProgramUniforms(GLhandleARB program)
+static void GLSL_ShowProgramUniforms(GLuint program)
{
int i, count, size;
GLenum type;
char uniformName[1000];
// query the number of active uniforms
- qglGetObjectParameterivARB(program, GL_OBJECT_ACTIVE_UNIFORMS_ARB, &count);
+ qglGetProgramiv(program, GL_ACTIVE_UNIFORMS, &count);
// Loop over each of the active uniforms, and set their value
for(i = 0; i < count; i++)
{
- qglGetActiveUniformARB(program, i, sizeof(uniformName), NULL, &size, &type, uniformName);
+ qglGetActiveUniform(program, i, sizeof(uniformName), NULL, &size, &type, uniformName);
ri.Printf(PRINT_DEVELOPER, "active uniform: '%s'\n", uniformName);
}
@@ -516,64 +516,64 @@ static int GLSL_InitGPUShader2(shaderProgram_t * program, const char *name, int
Q_strncpyz(program->name, name, sizeof(program->name));
- program->program = qglCreateProgramObjectARB();
+ program->program = qglCreateProgram();
program->attribs = attribs;
- if (!(GLSL_CompileGPUShader(program->program, &program->vertexShader, vpCode, strlen(vpCode), GL_VERTEX_SHADER_ARB)))
+ if (!(GLSL_CompileGPUShader(program->program, &program->vertexShader, vpCode, strlen(vpCode), GL_VERTEX_SHADER)))
{
- ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_VERTEX_SHADER_ARB\n", name);
- qglDeleteObjectARB(program->program);
+ ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_VERTEX_SHADER\n", name);
+ qglDeleteProgram(program->program);
return 0;
}
if(fpCode)
{
- if(!(GLSL_CompileGPUShader(program->program, &program->fragmentShader, fpCode, strlen(fpCode), GL_FRAGMENT_SHADER_ARB)))
+ if(!(GLSL_CompileGPUShader(program->program, &program->fragmentShader, fpCode, strlen(fpCode), GL_FRAGMENT_SHADER)))
{
- ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_FRAGMENT_SHADER_ARB\n", name);
- qglDeleteObjectARB(program->program);
+ ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_FRAGMENT_SHADER\n", name);
+ qglDeleteProgram(program->program);
return 0;
}
}
if(attribs & ATTR_POSITION)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_POSITION, "attr_Position");
+ qglBindAttribLocation(program->program, ATTR_INDEX_POSITION, "attr_Position");
if(attribs & ATTR_TEXCOORD)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_TEXCOORD, "attr_TexCoord0");
+ qglBindAttribLocation(program->program, ATTR_INDEX_TEXCOORD, "attr_TexCoord0");
if(attribs & ATTR_LIGHTCOORD)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_LIGHTCOORD, "attr_TexCoord1");
+ qglBindAttribLocation(program->program, ATTR_INDEX_LIGHTCOORD, "attr_TexCoord1");
// if(attribs & ATTR_TEXCOORD2)
-// qglBindAttribLocationARB(program->program, ATTR_INDEX_TEXCOORD2, "attr_TexCoord2");
+// qglBindAttribLocation(program->program, ATTR_INDEX_TEXCOORD2, "attr_TexCoord2");
// if(attribs & ATTR_TEXCOORD3)
-// qglBindAttribLocationARB(program->program, ATTR_INDEX_TEXCOORD3, "attr_TexCoord3");
+// qglBindAttribLocation(program->program, ATTR_INDEX_TEXCOORD3, "attr_TexCoord3");
if(attribs & ATTR_TANGENT)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_TANGENT, "attr_Tangent");
+ qglBindAttribLocation(program->program, ATTR_INDEX_TANGENT, "attr_Tangent");
if(attribs & ATTR_NORMAL)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_NORMAL, "attr_Normal");
+ qglBindAttribLocation(program->program, ATTR_INDEX_NORMAL, "attr_Normal");
if(attribs & ATTR_COLOR)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_COLOR, "attr_Color");
+ qglBindAttribLocation(program->program, ATTR_INDEX_COLOR, "attr_Color");
if(attribs & ATTR_PAINTCOLOR)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_PAINTCOLOR, "attr_PaintColor");
+ qglBindAttribLocation(program->program, ATTR_INDEX_PAINTCOLOR, "attr_PaintColor");
if(attribs & ATTR_LIGHTDIRECTION)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_LIGHTDIRECTION, "attr_LightDirection");
+ qglBindAttribLocation(program->program, ATTR_INDEX_LIGHTDIRECTION, "attr_LightDirection");
if(attribs & ATTR_POSITION2)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_POSITION2, "attr_Position2");
+ qglBindAttribLocation(program->program, ATTR_INDEX_POSITION2, "attr_Position2");
if(attribs & ATTR_NORMAL2)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_NORMAL2, "attr_Normal2");
+ qglBindAttribLocation(program->program, ATTR_INDEX_NORMAL2, "attr_Normal2");
if(attribs & ATTR_TANGENT2)
- qglBindAttribLocationARB(program->program, ATTR_INDEX_TANGENT2, "attr_Tangent2");
+ qglBindAttribLocation(program->program, ATTR_INDEX_TANGENT2, "attr_Tangent2");
GLSL_LinkProgram(program->program);
@@ -581,7 +581,7 @@ static int GLSL_InitGPUShader2(shaderProgram_t * program, const char *name, int
}
static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name,
- int attribs, qboolean fragmentShader, const GLcharARB *extra, qboolean addHeader,
+ int attribs, qboolean fragmentShader, const GLchar *extra, qboolean addHeader,
const char *fallback_vp, const char *fallback_fp)
{
char vpCode[32000];
@@ -593,7 +593,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name,
size = sizeof(vpCode);
if (addHeader)
{
- GLSL_GetShaderHeader(GL_VERTEX_SHADER_ARB, extra, vpCode, size);
+ GLSL_GetShaderHeader(GL_VERTEX_SHADER, extra, vpCode, size);
postHeader = &vpCode[strlen(vpCode)];
size -= strlen(vpCode);
}
@@ -602,7 +602,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name,
postHeader = &vpCode[0];
}
- if (!GLSL_LoadGPUShaderText(name, fallback_vp, GL_VERTEX_SHADER_ARB, postHeader, size))
+ if (!GLSL_LoadGPUShaderText(name, fallback_vp, GL_VERTEX_SHADER, postHeader, size))
{
return 0;
}
@@ -612,7 +612,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name,
size = sizeof(fpCode);
if (addHeader)
{
- GLSL_GetShaderHeader(GL_FRAGMENT_SHADER_ARB, extra, fpCode, size);
+ GLSL_GetShaderHeader(GL_FRAGMENT_SHADER, extra, fpCode, size);
postHeader = &fpCode[strlen(fpCode)];
size -= strlen(fpCode);
}
@@ -621,7 +621,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name,
postHeader = &fpCode[0];
}
- if (!GLSL_LoadGPUShaderText(name, fallback_fp, GL_FRAGMENT_SHADER_ARB, postHeader, size))
+ if (!GLSL_LoadGPUShaderText(name, fallback_fp, GL_FRAGMENT_SHADER, postHeader, size))
{
return 0;
}
@@ -641,7 +641,7 @@ void GLSL_InitUniforms(shaderProgram_t *program)
size = 0;
for (i = 0; i < UNIFORM_COUNT; i++)
{
- uniforms[i] = qglGetUniformLocationARB(program->program, uniformsInfo[i].name);
+ uniforms[i] = qglGetUniformLocation(program->program, uniformsInfo[i].name);
if (uniforms[i] == -1)
continue;
@@ -861,17 +861,17 @@ void GLSL_DeleteGPUShader(shaderProgram_t *program)
{
if (program->vertexShader)
{
- qglDetachObjectARB(program->program, program->vertexShader);
- qglDeleteObjectARB(program->vertexShader);
+ qglDetachShader(program->program, program->vertexShader);
+ qglDeleteShader(program->vertexShader);
}
if (program->fragmentShader)
{
- qglDetachObjectARB(program->program, program->fragmentShader);
- qglDeleteObjectARB(program->fragmentShader);
+ qglDetachShader(program->program, program->fragmentShader);
+ qglDeleteShader(program->fragmentShader);
}
- qglDeleteObjectARB(program->program);
+ qglDeleteProgram(program->program);
if (program->uniformBuffer)
{
@@ -1378,7 +1378,7 @@ void GLSL_ShutdownGPUShaders(void)
ri.Printf(PRINT_ALL, "------- GLSL_ShutdownGPUShaders -------\n");
for (i = 0; i < ATTR_INDEX_COUNT; i++)
- qglDisableVertexAttribArrayARB(i);
+ qglDisableVertexAttribArray(i);
GL_BindNullProgram();
@@ -1424,7 +1424,7 @@ void GLSL_BindProgram(shaderProgram_t * program)
GLimp_LogComment(va("--- GLSL_BindProgram( %s ) ---\n", name));
}
- if (GL_UseProgramObject(programObject))
+ if (GL_UseProgram(programObject))
backEnd.pc.c_glslShaderBinds++;
}
diff --git a/SP/code/rend2/tr_init.c b/SP/code/rend2/tr_init.c
index f0b1949..cf00d00 100644
--- a/SP/code/rend2/tr_init.c
+++ b/SP/code/rend2/tr_init.c
@@ -1050,8 +1050,8 @@ void GL_SetDefaultState( void ) {
if (glRefConfig.vertexArrayObject)
qglBindVertexArrayARB(0);
- qglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
- qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
+ qglBindBuffer(GL_ARRAY_BUFFER, 0);
+ qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glState.currentVao = NULL;
glState.vertexAttribsEnabled = 0;
@@ -1554,7 +1554,7 @@ void R_InitQueries(void)
return;
if (r_drawSunRays->integer)
- qglGenQueriesARB(ARRAY_LEN(tr.sunFlareQuery), tr.sunFlareQuery);
+ qglGenQueries(ARRAY_LEN(tr.sunFlareQuery), tr.sunFlareQuery);
}
void R_ShutDownQueries(void)
@@ -1563,7 +1563,7 @@ void R_ShutDownQueries(void)
return;
if (r_drawSunRays->integer)
- qglDeleteQueriesARB(ARRAY_LEN(tr.sunFlareQuery), tr.sunFlareQuery);
+ qglDeleteQueries(ARRAY_LEN(tr.sunFlareQuery), tr.sunFlareQuery);
}
/*
diff --git a/SP/code/rend2/tr_local.h b/SP/code/rend2/tr_local.h
index 38bb85a..f6d342b 100644
--- a/SP/code/rend2/tr_local.h
+++ b/SP/code/rend2/tr_local.h
@@ -801,9 +801,9 @@ typedef struct shaderProgram_s
{
char name[MAX_QPATH];
- GLhandleARB program;
- GLhandleARB vertexShader;
- GLhandleARB fragmentShader;
+ GLuint program;
+ GLuint vertexShader;
+ GLuint fragmentShader;
uint32_t attribs; // vertex array attributes
// uniform parameters
@@ -1528,6 +1528,9 @@ typedef enum {
// We can't change glConfig_t without breaking DLL/vms compatibility, so
// store extensions we have here.
typedef struct {
+ int openglMajorVersion;
+ int openglMinorVersion;
+
qboolean drawRangeElements;
qboolean multiDrawArrays;
qboolean occlusionQuery;
@@ -1545,7 +1548,6 @@ typedef struct {
qboolean textureFloat;
qboolean halfFloatPixel;
qboolean packedDepthStencil;
- qboolean arbTextureCompression;
textureCompressionRef_t textureCompression;
qboolean swizzleNormalmap;
diff --git a/SP/code/rend2/tr_postprocess.c b/SP/code/rend2/tr_postprocess.c
index c4e5155..ade9ebf 100644
--- a/SP/code/rend2/tr_postprocess.c
+++ b/SP/code/rend2/tr_postprocess.c
@@ -282,7 +282,7 @@ static qboolean RB_UpdateSunFlareVis(void)
for (iter=0 ; ; ++iter)
{
GLint available = 0;
- qglGetQueryObjectivARB(tr.sunFlareQuery[tr.sunFlareQueryIndex], GL_QUERY_RESULT_AVAILABLE_ARB, &available);
+ qglGetQueryObjectiv(tr.sunFlareQuery[tr.sunFlareQueryIndex], GL_QUERY_RESULT_AVAILABLE, &available);
if (available)
break;
}
@@ -290,7 +290,7 @@ static qboolean RB_UpdateSunFlareVis(void)
ri.Printf(PRINT_DEVELOPER, "Waited %d iterations\n", iter);
}
- qglGetQueryObjectuivARB(tr.sunFlareQuery[tr.sunFlareQueryIndex], GL_QUERY_RESULT_ARB, &sampleCount);
+ qglGetQueryObjectuiv(tr.sunFlareQuery[tr.sunFlareQueryIndex], GL_QUERY_RESULT, &sampleCount);
return sampleCount > 0;
}
diff --git a/SP/code/rend2/tr_shade.c b/SP/code/rend2/tr_shade.c
index 4a1ef8f..ec1981b 100644
--- a/SP/code/rend2/tr_shade.c
+++ b/SP/code/rend2/tr_shade.c
@@ -43,7 +43,7 @@ If you have questions concerning this license or the applicable additional terms
void R_DrawElementsVao( int numIndexes, glIndex_t firstIndex, glIndex_t minIndex, glIndex_t maxIndex )
{
if (glRefConfig.drawRangeElements)
- qglDrawRangeElementsEXT(GL_TRIANGLES, minIndex, maxIndex, numIndexes, GL_INDEX_TYPE, BUFFER_OFFSET(firstIndex * sizeof(glIndex_t)));
+ qglDrawRangeElements(GL_TRIANGLES, minIndex, maxIndex, numIndexes, GL_INDEX_TYPE, BUFFER_OFFSET(firstIndex * sizeof(glIndex_t)));
else
qglDrawElements(GL_TRIANGLES, numIndexes, GL_INDEX_TYPE, BUFFER_OFFSET(firstIndex * sizeof(glIndex_t)));
@@ -55,7 +55,7 @@ static void R_DrawMultiElementsVao( int multiDrawPrimitives, glIndex_t *multiDra
{
if (glRefConfig.multiDrawArrays && multiDrawPrimitives > 1)
{
- qglMultiDrawElementsEXT(GL_TRIANGLES, multiDrawNumIndexes, GL_INDEX_TYPE, (const GLvoid **)multiDrawFirstIndex, multiDrawPrimitives);
+ qglMultiDrawElements(GL_TRIANGLES, multiDrawNumIndexes, GL_INDEX_TYPE, (const GLvoid **)multiDrawFirstIndex, multiDrawPrimitives);
}
else
{
@@ -65,7 +65,7 @@ static void R_DrawMultiElementsVao( int multiDrawPrimitives, glIndex_t *multiDra
{
for (i = 0; i < multiDrawPrimitives; i++)
{
- qglDrawRangeElementsEXT(GL_TRIANGLES, multiDrawMinIndex[i], multiDrawMaxIndex[i], multiDrawNumIndexes[i], GL_INDEX_TYPE, multiDrawFirstIndex[i]);
+ qglDrawRangeElements(GL_TRIANGLES, multiDrawMinIndex[i], multiDrawMaxIndex[i], multiDrawNumIndexes[i], GL_INDEX_TYPE, multiDrawFirstIndex[i]);
}
}
else
diff --git a/SP/code/rend2/tr_surface.c b/SP/code/rend2/tr_surface.c
index dfd0f8d..c06a743 100644
--- a/SP/code/rend2/tr_surface.c
+++ b/SP/code/rend2/tr_surface.c
@@ -1877,43 +1877,43 @@ void RB_SurfaceVaoMdvMesh(srfVaoMdvMesh_t * surface)
if (glRefConfig.vertexArrayObject)
{
- qglBindBufferARB(GL_ARRAY_BUFFER_ARB, surface->vao->vertexesVBO);
+ qglBindBuffer(GL_ARRAY_BUFFER, surface->vao->vertexesVBO);
}
frameOffset = refEnt->frame * surface->vao->frameSize;
attribIndex = ATTR_INDEX_POSITION;
vAtb = &surface->vao->attribs[attribIndex];
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
attribIndex = ATTR_INDEX_NORMAL;
vAtb = &surface->vao->attribs[attribIndex];
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
attribIndex = ATTR_INDEX_TANGENT;
vAtb = &surface->vao->attribs[attribIndex];
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
frameOffset = refEnt->oldframe * surface->vao->frameSize;
attribIndex = ATTR_INDEX_POSITION2;
vAtb = &surface->vao->attribs[attribIndex];
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
attribIndex = ATTR_INDEX_NORMAL2;
vAtb = &surface->vao->attribs[attribIndex];
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
attribIndex = ATTR_INDEX_TANGENT2;
vAtb = &surface->vao->attribs[attribIndex];
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset));
if (!glRefConfig.vertexArrayObject)
{
attribIndex = ATTR_INDEX_TEXCOORD;
vAtb = &surface->vao->attribs[attribIndex];
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset));
}
}
diff --git a/SP/code/rend2/tr_vbo.c b/SP/code/rend2/tr_vbo.c
index 8f9ba66..61ede4e 100644
--- a/SP/code/rend2/tr_vbo.c
+++ b/SP/code/rend2/tr_vbo.c
@@ -196,9 +196,9 @@ void Vao_SetVertexPointers(vao_t *vao)
if (vAtb->enabled)
{
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset));
if (glRefConfig.vertexArrayObject || !(glState.vertexAttribsEnabled & attribBit))
- qglEnableVertexAttribArrayARB(attribIndex);
+ qglEnableVertexAttribArray(attribIndex);
if (!glRefConfig.vertexArrayObject || vao == tess.vao)
glState.vertexAttribsEnabled |= attribBit;
@@ -208,7 +208,7 @@ void Vao_SetVertexPointers(vao_t *vao)
// don't disable vertex attribs when using vertex array objects
// Vao_SetVertexPointers is only called during init when using VAOs, and vertex attribs start disabled anyway
if (!glRefConfig.vertexArrayObject && (glState.vertexAttribsEnabled & attribBit))
- qglDisableVertexAttribArrayARB(attribIndex);
+ qglDisableVertexAttribArray(attribIndex);
if (!glRefConfig.vertexArrayObject || vao == tess.vao)
glState.vertexAttribsEnabled &= ~attribBit;
@@ -229,11 +229,11 @@ vao_t *R_CreateVao(const char *name, byte *vertexes, int vertexesSize, byte *ind
switch (usage)
{
case VAO_USAGE_STATIC:
- glUsage = GL_STATIC_DRAW_ARB;
+ glUsage = GL_STATIC_DRAW;
break;
case VAO_USAGE_DYNAMIC:
- glUsage = GL_DYNAMIC_DRAW_ARB;
+ glUsage = GL_DYNAMIC_DRAW;
break;
default:
@@ -269,18 +269,18 @@ vao_t *R_CreateVao(const char *name, byte *vertexes, int vertexesSize, byte *ind
vao->vertexesSize = vertexesSize;
- qglGenBuffersARB(1, &vao->vertexesVBO);
+ qglGenBuffers(1, &vao->vertexesVBO);
- qglBindBufferARB(GL_ARRAY_BUFFER_ARB, vao->vertexesVBO);
- qglBufferDataARB(GL_ARRAY_BUFFER_ARB, vertexesSize, vertexes, glUsage);
+ qglBindBuffer(GL_ARRAY_BUFFER, vao->vertexesVBO);
+ qglBufferData(GL_ARRAY_BUFFER, vertexesSize, vertexes, glUsage);
vao->indexesSize = indexesSize;
- qglGenBuffersARB(1, &vao->indexesIBO);
+ qglGenBuffers(1, &vao->indexesIBO);
- qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vao->indexesIBO);
- qglBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, indexesSize, indexes, glUsage);
+ qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao->indexesIBO);
+ qglBufferData(GL_ELEMENT_ARRAY_BUFFER, indexesSize, indexes, glUsage);
glState.currentVao = vao;
@@ -304,7 +304,7 @@ vao_t *R_CreateVao2(const char *name, int numVertexes, srfVert_t *verts, int num
int dataSize;
int dataOfs;
- int glUsage = GL_STATIC_DRAW_ARB;
+ int glUsage = GL_STATIC_DRAW;
if(!numVertexes || !numIndexes)
return NULL;
@@ -422,19 +422,19 @@ vao_t *R_CreateVao2(const char *name, int numVertexes, srfVert_t *verts, int num
vao->vertexesSize = dataSize;
- qglGenBuffersARB(1, &vao->vertexesVBO);
+ qglGenBuffers(1, &vao->vertexesVBO);
- qglBindBufferARB(GL_ARRAY_BUFFER_ARB, vao->vertexesVBO);
- qglBufferDataARB(GL_ARRAY_BUFFER_ARB, vao->vertexesSize, data, glUsage);
+ qglBindBuffer(GL_ARRAY_BUFFER, vao->vertexesVBO);
+ qglBufferData(GL_ARRAY_BUFFER, vao->vertexesSize, data, glUsage);
// create IBO
vao->indexesSize = numIndexes * sizeof(glIndex_t);
- qglGenBuffersARB(1, &vao->indexesIBO);
+ qglGenBuffers(1, &vao->indexesIBO);
- qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vao->indexesIBO);
- qglBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vao->indexesSize, indexes, glUsage);
+ qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao->indexesIBO);
+ qglBufferData(GL_ELEMENT_ARRAY_BUFFER, vao->indexesSize, indexes, glUsage);
Vao_SetVertexPointers(vao);
@@ -484,16 +484,16 @@ void R_BindVao(vao_t * vao)
// why you no save GL_ELEMENT_ARRAY_BUFFER binding, Intel?
if (1)
- qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, vao->indexesIBO);
+ qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao->indexesIBO);
// tess VAO always has buffers bound
if (vao == tess.vao)
- qglBindBufferARB(GL_ARRAY_BUFFER_ARB, vao->vertexesVBO);
+ qglBindBuffer(GL_ARRAY_BUFFER, vao->vertexesVBO);
}
else
{
- qglBindBufferARB(GL_ARRAY_BUFFER_ARB, vao->vertexesVBO);
- qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vao->indexesIBO);
+ qglBindBuffer(GL_ARRAY_BUFFER, vao->vertexesVBO);
+ qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao->indexesIBO);
// tess VAO doesn't have vertex pointers set until data is uploaded
if (vao != tess.vao)
@@ -518,12 +518,12 @@ void R_BindNullVao(void)
qglBindVertexArrayARB(0);
// why you no save GL_ELEMENT_ARRAY_BUFFER binding, Intel?
- if (1) qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
+ if (1) qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
else
{
- qglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
- qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
+ qglBindBuffer(GL_ARRAY_BUFFER, 0);
+ qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
glState.currentVao = NULL;
}
@@ -658,12 +658,12 @@ void R_ShutdownVaos(void)
if(vao->vertexesVBO)
{
- qglDeleteBuffersARB(1, &vao->vertexesVBO);
+ qglDeleteBuffers(1, &vao->vertexesVBO);
}
if(vao->indexesIBO)
{
- qglDeleteBuffersARB(1, &vao->indexesIBO);
+ qglDeleteBuffers(1, &vao->indexesIBO);
}
}
@@ -737,7 +737,7 @@ void RB_UpdateTessVao(unsigned int attribBits)
R_BindVao(tess.vao);
// orphan old vertex buffer so we don't stall on it
- qglBufferDataARB(GL_ARRAY_BUFFER_ARB, tess.vao->vertexesSize, NULL, GL_DYNAMIC_DRAW_ARB);
+ qglBufferData(GL_ARRAY_BUFFER, tess.vao->vertexesSize, NULL, GL_DYNAMIC_DRAW);
// if nothing to set, set everything
if(!(attribBits & ATTR_BITS))
@@ -761,17 +761,17 @@ void RB_UpdateTessVao(unsigned int attribBits)
if (attribUpload & attribBit)
{
// note: tess has a VBO where stride == size
- qglBufferSubDataARB(GL_ARRAY_BUFFER_ARB, vAtb->offset, tess.numVertexes * vAtb->stride, tess.attribPointers[attribIndex]);
+ qglBufferSubData(GL_ARRAY_BUFFER, vAtb->offset, tess.numVertexes * vAtb->stride, tess.attribPointers[attribIndex]);
}
if (attribBits & attribBit)
{
if (!glRefConfig.vertexArrayObject)
- qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset));
+ qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset));
if (!(glState.vertexAttribsEnabled & attribBit))
{
- qglEnableVertexAttribArrayARB(attribIndex);
+ qglEnableVertexAttribArray(attribIndex);
glState.vertexAttribsEnabled |= attribBit;
}
}
@@ -779,15 +779,15 @@ void RB_UpdateTessVao(unsigned int attribBits)
{
if ((glState.vertexAttribsEnabled & attribBit))
{
- qglDisableVertexAttribArrayARB(attribIndex);
+ qglDisableVertexAttribArray(attribIndex);
glState.vertexAttribsEnabled &= ~attribBit;
}
}
}
// orphan old index buffer so we don't stall on it
- qglBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, tess.vao->indexesSize, NULL, GL_DYNAMIC_DRAW_ARB);
+ qglBufferData(GL_ELEMENT_ARRAY_BUFFER, tess.vao->indexesSize, NULL, GL_DYNAMIC_DRAW);
- qglBufferSubDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, tess.numIndexes * sizeof(tess.indexes[0]), tess.indexes);
+ qglBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, tess.numIndexes * sizeof(tess.indexes[0]), tess.indexes);
}
}
--
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