diff --git a/reaction/Reaction-ChangeLog b/reaction/Reaction-ChangeLog index dd3fcf46..7f0bba16 100644 --- a/reaction/Reaction-ChangeLog +++ b/reaction/Reaction-ChangeLog @@ -1,4 +1,5 @@ -- Use GL_ext_draw_range_elements +- Detect GLSL version +- Use GL_EXT_draw_range_elements - Reserve FBOs before shaders, as recommended in nvidia docs - Minor tweak in VBO allocation. - Update tr_font.c to ioq3 latest (r2232) diff --git a/reaction/code/renderergl2/qgl.h b/reaction/code/renderergl2/qgl.h index 298e9669..557e335c 100644 --- a/reaction/code/renderergl2/qgl.h +++ b/reaction/code/renderergl2/qgl.h @@ -46,6 +46,12 @@ extern void (APIENTRY * qglDrawRangeElementsEXT) (GLenum mode, GLuint start, extern void (APIENTRY * qglMultiDrawArraysEXT) (GLenum, GLint *, GLsizei *, GLsizei); extern void (APIENTRY * qglMultiDrawElementsEXT) (GLenum, const GLsizei *, GLenum, const GLvoid **, GLsizei); +// 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 *); diff --git a/reaction/code/renderergl2/tr_extensions.c b/reaction/code/renderergl2/tr_extensions.c index 5b34026c..2a7688f5 100644 --- a/reaction/code/renderergl2/tr_extensions.c +++ b/reaction/code/renderergl2/tr_extensions.c @@ -30,8 +30,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "tr_local.h" // GL_EXT_draw_range_elements -void (APIENTRY * qglDrawRangeElementsEXT) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); - +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, GLint *first, GLsizei *count, GLsizei primcount); void (APIENTRY * qglMultiDrawElementsEXT) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); @@ -196,7 +196,7 @@ void GLimp_InitExtraExtensions() qglMultiDrawElementsEXT = NULL; if( GLimp_HaveExtension( extension ) ) { - qglDrawRangeElementsEXT = (PFNGLMULTIDRAWARRAYSEXTPROC) SDL_GL_GetProcAddress("glDrawRangeElementsEXT"); + qglDrawRangeElementsEXT = (void *) SDL_GL_GetProcAddress("glDrawRangeElementsEXT"); if ( r_ext_draw_range_elements->integer) glRefConfig.drawRangeElements = qtrue; @@ -415,6 +415,24 @@ void GLimp_InitExtraExtensions() ri.Error(ERR_FATAL, result[2], extension); } + // GL_ARB_shading_language_100 + extension = "GL_ARB_shading_language_100"; + glRefConfig.textureFloat = qfalse; + if( GLimp_HaveExtension( extension ) ) + { + char version[256]; + + Q_strncpyz( version, (char *) qglGetString (GL_SHADING_LANGUAGE_VERSION_ARB), 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; if( GLimp_HaveExtension( "GL_NVX_gpu_memory_info" ) ) diff --git a/reaction/code/renderergl2/tr_glsl.c b/reaction/code/renderergl2/tr_glsl.c index 9e0cdf03..249cf48d 100644 --- a/reaction/code/renderergl2/tr_glsl.c +++ b/reaction/code/renderergl2/tr_glsl.c @@ -747,7 +747,7 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, cha dest[0] = '\0'; // HACK: abuse the GLSL preprocessor to turn GLSL 1.20 shaders into 1.30 ones - if(0) //(glConfig.driverType == GLDRV_OPENGL3) + if(glRefConfig.glslMajorVersion > 1 || (glRefConfig.glslMajorVersion == 1 && glRefConfig.glslMinorVersion >= 30)) { Q_strcat(dest, size, "#version 130\n"); diff --git a/reaction/code/renderergl2/tr_local.h b/reaction/code/renderergl2/tr_local.h index 381baca0..9b8190bf 100644 --- a/reaction/code/renderergl2/tr_local.h +++ b/reaction/code/renderergl2/tr_local.h @@ -1606,6 +1606,9 @@ typedef struct { qboolean multiDrawArrays; qboolean occlusionQuery; + int glslMajorVersion; + int glslMinorVersion; + memInfo_t memInfo; qboolean framebufferObject;