r1387 - in trunk/code: renderer sdl
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Thu Jun 12 22:28:52 EDT 2008
Author: icculus
Date: 2008-06-12 22:28:51 -0400 (Thu, 12 Jun 2008)
New Revision: 1387
Modified:
trunk/code/renderer/tr_image.c
trunk/code/renderer/tr_types.h
trunk/code/sdl/sdl_glimp.c
Log:
Added GL_EXT_texture_compression_s3tc support.
GL_S3_s3tc, which Quake 3 previously supported, is legacy. This new codepath
is the common, vendor-neutral extension to get the same results.
Modified: trunk/code/renderer/tr_image.c
===================================================================
--- trunk/code/renderer/tr_image.c 2008-06-12 18:32:33 UTC (rev 1386)
+++ trunk/code/renderer/tr_image.c 2008-06-13 02:28:51 UTC (rev 1387)
@@ -182,6 +182,7 @@
ri.Printf( PRINT_ALL, "RGB8" );
break;
case GL_RGB4_S3TC:
+ case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
ri.Printf( PRINT_ALL, "S3TC " );
break;
case GL_RGBA4:
@@ -602,8 +603,12 @@
}
else
{
- if ( glConfig.textureCompression == TC_S3TC )
+ if ( glConfig.textureCompression == TC_S3TC_ARB )
{
+ internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
+ }
+ else if ( glConfig.textureCompression == TC_S3TC )
+ {
internalFormat = GL_RGB4_S3TC;
}
else if ( r_texturebits->integer == 16 )
Modified: trunk/code/renderer/tr_types.h
===================================================================
--- trunk/code/renderer/tr_types.h 2008-06-12 18:32:33 UTC (rev 1386)
+++ trunk/code/renderer/tr_types.h 2008-06-13 02:28:51 UTC (rev 1387)
@@ -151,7 +151,8 @@
*/
typedef enum {
TC_NONE,
- TC_S3TC
+ TC_S3TC, // this is for the GL_S3_s3tc extension.
+ TC_S3TC_ARB // this is for the GL_EXT_texture_compression_s3tc extension.
} textureCompression_t;
typedef enum {
Modified: trunk/code/sdl/sdl_glimp.c
===================================================================
--- trunk/code/sdl/sdl_glimp.c 2008-06-12 18:32:33 UTC (rev 1386)
+++ trunk/code/sdl/sdl_glimp.c 2008-06-13 02:28:51 UTC (rev 1387)
@@ -445,6 +445,17 @@
return qtrue;
}
+
+static qboolean GLimp_HaveExtension(const char *ext)
+{
+ const char *ptr = Q_stristr( glConfig.extensions_string, ext );
+ if (ptr == NULL)
+ return qfalse;
+ ptr += strlen(ext);
+ return ((*ptr == ' ') || (*ptr == '\0')); // verify it's complete string.
+}
+
+
/*
===============
GLimp_InitExtensions
@@ -460,29 +471,52 @@
ri.Printf( PRINT_ALL, "Initializing OpenGL extensions\n" );
- // GL_S3_s3tc
- if ( Q_stristr( glConfig.extensions_string, "GL_S3_s3tc" ) )
+ glConfig.textureCompression = TC_NONE;
+
+ // GL_EXT_texture_compression_s3tc
+ if ( GLimp_HaveExtension( "GL_ARB_texture_compression" ) &&
+ GLimp_HaveExtension( "GL_EXT_texture_compression_s3tc" ) )
{
if ( r_ext_compressed_textures->value )
{
- glConfig.textureCompression = TC_S3TC;
- ri.Printf( PRINT_ALL, "...using GL_S3_s3tc\n" );
+ glConfig.textureCompression = TC_S3TC_ARB;
+ ri.Printf( PRINT_ALL, "...using GL_EXT_texture_compression_s3tc\n" );
}
else
{
- glConfig.textureCompression = TC_NONE;
- ri.Printf( PRINT_ALL, "...ignoring GL_S3_s3tc\n" );
+ ri.Printf( PRINT_ALL, "...ignoring GL_EXT_texture_compression_s3tc\n" );
}
}
else
{
- glConfig.textureCompression = TC_NONE;
- ri.Printf( PRINT_ALL, "...GL_S3_s3tc not found\n" );
+ ri.Printf( PRINT_ALL, "...GL_EXT_texture_compression_s3tc not found\n" );
}
+ // GL_S3_s3tc ... legacy extension before GL_EXT_texture_compression_s3tc.
+ if (glConfig.textureCompression == TC_NONE)
+ {
+ if ( GLimp_HaveExtension( "GL_S3_s3tc" ) )
+ {
+ if ( r_ext_compressed_textures->value )
+ {
+ glConfig.textureCompression = TC_S3TC;
+ ri.Printf( PRINT_ALL, "...using GL_S3_s3tc\n" );
+ }
+ else
+ {
+ ri.Printf( PRINT_ALL, "...ignoring GL_S3_s3tc\n" );
+ }
+ }
+ else
+ {
+ ri.Printf( PRINT_ALL, "...GL_S3_s3tc not found\n" );
+ }
+ }
+
+
// GL_EXT_texture_env_add
glConfig.textureEnvAddAvailable = qfalse;
- if ( Q_stristr( glConfig.extensions_string, "EXT_texture_env_add" ) )
+ if ( GLimp_HaveExtension( "EXT_texture_env_add" ) )
{
if ( r_ext_texture_env_add->integer )
{
@@ -504,7 +538,7 @@
qglMultiTexCoord2fARB = NULL;
qglActiveTextureARB = NULL;
qglClientActiveTextureARB = NULL;
- if ( Q_stristr( glConfig.extensions_string, "GL_ARB_multitexture" ) )
+ if ( GLimp_HaveExtension( "GL_ARB_multitexture" ) )
{
if ( r_ext_multitexture->value )
{
@@ -541,7 +575,7 @@
}
// GL_EXT_compiled_vertex_array
- if ( Q_stristr( glConfig.extensions_string, "GL_EXT_compiled_vertex_array" ) )
+ if ( GLimp_HaveExtension( "GL_EXT_compiled_vertex_array" ) )
{
if ( r_ext_compiled_vertex_array->value )
{
@@ -564,7 +598,7 @@
}
textureFilterAnisotropic = qfalse;
- if ( strstr( glConfig.extensions_string, "GL_EXT_texture_filter_anisotropic" ) )
+ if ( GLimp_HaveExtension( "GL_EXT_texture_filter_anisotropic" ) )
{
if ( r_ext_texture_filter_anisotropic->integer ) {
qglGetIntegerv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, (GLint *)&maxAnisotropy );
More information about the quake3-commits
mailing list