OpenGL2: Require OpenGL 2.0.
This commit is contained in:
parent
ebc7894777
commit
251c983681
12 changed files with 302 additions and 619 deletions
|
@ -30,101 +30,59 @@ 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);
|
||||
// OpenGL 1.2, was GL_EXT_draw_range_elements
|
||||
void (APIENTRY * qglDrawRangeElements) (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 GLvoid* *indices, GLsizei primcount);
|
||||
// OpenGL 1.3, was GL_ARB_texture_compression
|
||||
void (APIENTRY * qglCompressedTexImage2D) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
|
||||
void (APIENTRY * qglCompressedTexSubImage2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
|
||||
|
||||
// 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);
|
||||
// OpenGL 1.4, was GL_EXT_multi_draw_arrays
|
||||
void (APIENTRY * qglMultiDrawElements) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
|
||||
|
||||
// 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);
|
||||
// OpenGL 1.5, previously GL_ARB_vertex_buffer_object
|
||||
void (APIENTRY * qglGenQueries) (GLsizei n, GLuint *ids);
|
||||
void (APIENTRY * qglDeleteQueries) (GLsizei n, const GLuint *ids);
|
||||
void (APIENTRY * qglBeginQuery) (GLenum target, GLuint id);
|
||||
void (APIENTRY * qglEndQuery) (GLenum target);
|
||||
void (APIENTRY * qglGetQueryObjectiv) (GLuint id, GLenum pname, GLint *params);
|
||||
void (APIENTRY * qglGetQueryObjectuiv) (GLuint id, GLenum pname, GLuint *params);
|
||||
void (APIENTRY * qglBindBuffer) (GLenum target, GLuint buffer);
|
||||
void (APIENTRY * qglDeleteBuffers) (GLsizei n, const GLuint *buffers);
|
||||
void (APIENTRY * qglGenBuffers) (GLsizei n, GLuint *buffers);
|
||||
void (APIENTRY * qglBufferData) (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
|
||||
void (APIENTRY * qglBufferSubData) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
|
||||
|
||||
// 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);
|
||||
// OpenGL 2.0, previously GL_ARB_shading_language_100, GL_ARB_vertex_program, GL_ARB_shader_objects, and GL_ARB_vertex_shader
|
||||
void (APIENTRY * qglAttachShader) (GLuint program, GLuint shader);
|
||||
void (APIENTRY * qglBindAttribLocation) (GLuint program, GLuint index, const GLchar *name);
|
||||
void (APIENTRY * qglCompileShader) (GLuint shader);
|
||||
GLuint(APIENTRY * qglCreateProgram) (void);
|
||||
GLuint(APIENTRY * qglCreateShader) (GLenum type);
|
||||
void (APIENTRY * qglDeleteProgram) (GLuint program);
|
||||
void (APIENTRY * qglDeleteShader) (GLuint shader);
|
||||
void (APIENTRY * qglDetachShader) (GLuint program, GLuint shader);
|
||||
void (APIENTRY * qglDisableVertexAttribArray) (GLuint index);
|
||||
void (APIENTRY * qglEnableVertexAttribArray) (GLuint index);
|
||||
void (APIENTRY * qglGetActiveUniform) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
|
||||
void (APIENTRY * qglGetProgramiv) (GLuint program, GLenum pname, GLint *params);
|
||||
void (APIENTRY * qglGetProgramInfoLog) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
|
||||
void (APIENTRY * qglGetShaderiv) (GLuint shader, GLenum pname, GLint *params);
|
||||
void (APIENTRY * qglGetShaderInfoLog) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
|
||||
void (APIENTRY * qglGetShaderSource) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
|
||||
GLint(APIENTRY * qglGetUniformLocation) (GLuint program, const GLchar *name);
|
||||
void (APIENTRY * qglLinkProgram) (GLuint program);
|
||||
void (APIENTRY * qglShaderSource) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length);
|
||||
void (APIENTRY * qglUseProgram) (GLuint program);
|
||||
void (APIENTRY * qglUniform1f) (GLint location, GLfloat v0);
|
||||
void (APIENTRY * qglUniform2f) (GLint location, GLfloat v0, GLfloat v1);
|
||||
void (APIENTRY * qglUniform3f) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
|
||||
void (APIENTRY * qglUniform4f) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
|
||||
void (APIENTRY * qglUniform1i) (GLint location, GLint v0);
|
||||
void (APIENTRY * qglUniform1fv) (GLint location, GLsizei count, const GLfloat *value);
|
||||
void (APIENTRY * qglUniformMatrix4fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
|
||||
void (APIENTRY * qglValidateProgram) (GLuint program);
|
||||
void (APIENTRY * qglVertexAttribPointer) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
|
||||
|
||||
// GL_EXT_framebuffer_object
|
||||
GLboolean (APIENTRY * qglIsRenderbufferEXT)(GLuint renderbuffer);
|
||||
|
@ -157,16 +115,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 +188,80 @@ 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");
|
||||
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);
|
||||
|
||||
if ( r_ext_draw_range_elements->integer)
|
||||
glRefConfig.drawRangeElements = qtrue;
|
||||
// OpenGL 1.2, was GL_EXT_draw_range_elements
|
||||
qglDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)SDL_GL_GetProcAddress("glDrawRangeElements");
|
||||
glRefConfig.drawRangeElements = r_ext_draw_range_elements->integer ? qtrue : qfalse;
|
||||
ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], "glDrawRangeElements()");
|
||||
|
||||
ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], extension);
|
||||
}
|
||||
else
|
||||
{
|
||||
ri.Printf(PRINT_ALL, result[2], extension);
|
||||
}
|
||||
// OpenGL 1.3, was GL_ARB_texture_compression
|
||||
qglCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC) SDL_GL_GetProcAddress("glCompressedTexImage2D");
|
||||
qglCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) SDL_GL_GetProcAddress("qglCompressedTexSubImage2D");
|
||||
|
||||
// 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");
|
||||
// OpenGL 1.4, was GL_EXT_multi_draw_arrays
|
||||
qglMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)SDL_GL_GetProcAddress("glMultiDrawElements");
|
||||
glRefConfig.drawRangeElements = r_ext_multi_draw_arrays->integer ? qtrue : qfalse;
|
||||
ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], "glMultiDrawElements()");
|
||||
|
||||
if ( r_ext_multi_draw_arrays->integer )
|
||||
glRefConfig.multiDrawArrays = qtrue;
|
||||
// OpenGL 1.5, was GL_ARB_vertex_buffer_object and GL_ARB_occlusion_query
|
||||
qglGenQueries = (PFNGLGENQUERIESPROC) SDL_GL_GetProcAddress("glGenQueries");
|
||||
qglDeleteQueries = (PFNGLDELETEQUERIESPROC) SDL_GL_GetProcAddress("glDeleteQueries");
|
||||
qglBeginQuery = (PFNGLBEGINQUERYPROC) SDL_GL_GetProcAddress("glBeginQuery");
|
||||
qglEndQuery = (PFNGLENDQUERYPROC) SDL_GL_GetProcAddress("glEndQuery");
|
||||
qglGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC) SDL_GL_GetProcAddress("glGetQueryObjectiv");
|
||||
qglGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC) SDL_GL_GetProcAddress("glGetQueryObjectuiv");
|
||||
qglBindBuffer = (PFNGLBINDBUFFERPROC) SDL_GL_GetProcAddress("glBindBuffer");
|
||||
qglDeleteBuffers = (PFNGLDELETEBUFFERSPROC) SDL_GL_GetProcAddress("glDeleteBuffers");
|
||||
qglGenBuffers = (PFNGLGENBUFFERSPROC) SDL_GL_GetProcAddress("glGenBuffers");
|
||||
qglBufferData = (PFNGLBUFFERDATAPROC) SDL_GL_GetProcAddress("glBufferData");
|
||||
qglBufferSubData = (PFNGLBUFFERSUBDATAPROC) SDL_GL_GetProcAddress("glBufferSubData");
|
||||
glRefConfig.occlusionQuery = qtrue;
|
||||
|
||||
ri.Printf(PRINT_ALL, result[glRefConfig.multiDrawArrays], extension);
|
||||
}
|
||||
else
|
||||
{
|
||||
ri.Printf(PRINT_ALL, result[2], extension);
|
||||
}
|
||||
// OpenGL 2.0, was GL_ARB_shading_language_100, GL_ARB_vertex_program, GL_ARB_shader_objects, and GL_ARB_vertex_shader
|
||||
qglAttachShader = (PFNGLATTACHSHADERPROC) SDL_GL_GetProcAddress("glAttachShader");
|
||||
qglBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC) SDL_GL_GetProcAddress("glBindAttribLocation");
|
||||
qglCompileShader = (PFNGLCOMPILESHADERPROC) SDL_GL_GetProcAddress("glCompileShader");
|
||||
qglCreateProgram = (PFNGLCREATEPROGRAMPROC) SDL_GL_GetProcAddress("glCreateProgram");
|
||||
qglCreateShader = (PFNGLCREATESHADERPROC) SDL_GL_GetProcAddress("glCreateShader");
|
||||
qglDeleteProgram = (PFNGLDELETEPROGRAMPROC) SDL_GL_GetProcAddress("glDeleteProgram");
|
||||
qglDeleteShader = (PFNGLDELETESHADERPROC) SDL_GL_GetProcAddress("glDeleteShader");
|
||||
qglDetachShader = (PFNGLDETACHSHADERPROC) SDL_GL_GetProcAddress("glDetachShader");
|
||||
qglDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC) SDL_GL_GetProcAddress("glDisableVertexAttribArray");
|
||||
qglEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC) SDL_GL_GetProcAddress("glEnableVertexAttribArray");
|
||||
qglGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC) SDL_GL_GetProcAddress("glGetActiveUniform");
|
||||
qglGetProgramiv = (PFNGLGETPROGRAMIVPROC) SDL_GL_GetProcAddress("glGetProgramiv");
|
||||
qglGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC) SDL_GL_GetProcAddress("glGetProgramInfoLog");
|
||||
qglGetShaderiv = (PFNGLGETSHADERIVPROC) SDL_GL_GetProcAddress("glGetShaderiv");
|
||||
qglGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC) SDL_GL_GetProcAddress("glGetShaderInfoLog");
|
||||
qglGetShaderSource = (PFNGLGETSHADERSOURCEPROC) SDL_GL_GetProcAddress("glGetShaderSource");
|
||||
qglGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC) SDL_GL_GetProcAddress("glGetUniformLocation");
|
||||
qglLinkProgram = (PFNGLLINKPROGRAMPROC) SDL_GL_GetProcAddress("glLinkProgram");
|
||||
qglShaderSource = (PFNGLSHADERSOURCEPROC) SDL_GL_GetProcAddress("glShaderSource");
|
||||
qglUseProgram = (PFNGLUSEPROGRAMPROC) SDL_GL_GetProcAddress("glUseProgram");
|
||||
qglUniform1f = (PFNGLUNIFORM1FPROC) SDL_GL_GetProcAddress("glUniform1f");
|
||||
qglUniform2f = (PFNGLUNIFORM2FPROC) SDL_GL_GetProcAddress("glUniform2f");
|
||||
qglUniform3f = (PFNGLUNIFORM3FPROC) SDL_GL_GetProcAddress("glUniform3f");
|
||||
qglUniform4f = (PFNGLUNIFORM4FPROC) SDL_GL_GetProcAddress("glUniform4f");
|
||||
qglUniform1i = (PFNGLUNIFORM1IPROC) SDL_GL_GetProcAddress("glUniform1i");
|
||||
qglUniform1fv = (PFNGLUNIFORM1FVPROC) SDL_GL_GetProcAddress("glUniform1fv");
|
||||
qglUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC) SDL_GL_GetProcAddress("glUniformMatrix4fv");
|
||||
qglValidateProgram = (PFNGLVALIDATEPROGRAMPROC) SDL_GL_GetProcAddress("glValidateProgram");
|
||||
qglVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC) SDL_GL_GetProcAddress("glVertexAttribPointer");
|
||||
|
||||
// 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_ARB_vertex_shader
|
||||
//glRefConfig.vertexShader = qfalse;
|
||||
extension = "GL_ARB_vertex_shader";
|
||||
qglBindAttribLocationARB = NULL;
|
||||
qglGetActiveAttribARB = NULL;
|
||||
qglGetAttribLocationARB = NULL;
|
||||
if( GLimp_HaveExtension( extension ) )
|
||||
{
|
||||
//int reservedComponents;
|
||||
|
||||
//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);
|
||||
|
||||
//reservedComponents = 16 * 10; // approximation how many uniforms we have besides the bone matrices
|
||||
|
||||
#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
|
||||
|
||||
glConfig.maxVertexUniforms = Q_bound(0, glConfig.maxVertexUniforms, 512);
|
||||
}
|
||||
#endif
|
||||
|
||||
//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);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
// 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 +371,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 +385,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 +405,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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue