diff -ru a/code/renderer/tr_shader.c b/code/renderer/tr_shader.c --- a/code/renderer/tr_shader.c 2011-08-07 18:35:27.000000000 -0500 +++ b/code/renderer/tr_shader.c 2011-08-07 18:39:31.000000000 -0500 @@ -2421,6 +2421,11 @@ return qfalse; } + if (stages[0].bundle[0].imageAnimationSpeed && stages[0].bundle[0].numImageAnimations > 1) { + // animmap doesn't work correctly with GLSL + return qfalse; + } + if( !GLSLversion ) { const char *GLSLString = (const char *)glGetString( GL_SHADING_LANGUAGE_VERSION_ARB ); int major, minor; @@ -2820,6 +2825,20 @@ if ( GLSLversion < 0x010a ) { return qfalse; } + + if (shader.lightmapIndex == LIGHTMAP_MD3 && qglTexBufferEXT) { + // needs fsfTangents + fsFeatures |= fsfTangents; + } + + // enable needed features + if ((fsFeatures & fsfTangents) && !GSidx) { + fsFeatures |= fsfVertex; + vsFeatures |= vsfTexCoord; + } else if (GSidx) { + vsFeatures |= vsfTexCoord; + } + VSText("#version 110\n" "\n"); //VSText("/*");VSText(shader.name);VSText("*/\n"); diff -ru a/code/sdl/sdl_glimp.c b/code/sdl/sdl_glimp.c --- a/code/sdl/sdl_glimp.c 2011-08-07 18:35:28.000000000 -0500 +++ b/code/sdl/sdl_glimp.c 2011-08-07 18:39:23.000000000 -0500 @@ -1728,7 +1728,7 @@ } // GL_EXT_texture_buffer_object, mandatory since OpenGL 3.0 - if( !glGlobals.floatTextures || !r_ext_texture_buffer_object->integer ) { + if( !glGlobals.floatTextures || !r_ext_texture_buffer_object->integer || !qglProgramParameteriEXT) { qglTexBufferEXT = NULL; ri.Printf( PRINT_ALL, "...ignoring GL_EXT_texture_buffer_object\n" ); } else if( GLversion >= 0x0300 ) {