fix greyscaling bug in texture compression

git-svn-id: svn://svn.icculus.org/netradiant/trunk@358 61c419a2-8eb2-4b30-bcec-8cead039b335
This commit is contained in:
divverent 2009-04-29 17:02:37 +00:00
parent a1f2938c75
commit 9507f334d1

View File

@ -487,6 +487,44 @@ public:
g_texture_globals.m_bS3CompressionSupported = true; g_texture_globals.m_bS3CompressionSupported = true;
} }
switch(g_texture_globals.texture_components)
{
case GL_RGBA:
break;
case GL_COMPRESSED_RGBA_ARB:
if (!g_texture_globals.m_bOpenGLCompressionSupported)
{
globalOutputStream() << "OpenGL extension GL_ARB_texture_compression not supported by current graphics drivers\n";
g_texture_globals.m_nTextureCompressionFormat = TEXTURECOMPRESSION_NONE;
g_texture_globals.texture_components = GL_RGBA;
}
break;
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
if(!g_texture_globals.m_bS3CompressionSupported)
{
globalOutputStream() << "OpenGL extension GL_EXT_texture_compression_s3tc not supported by current graphics drivers\n";
if(g_texture_globals.m_bOpenGLCompressionSupported)
{
g_texture_globals.m_nTextureCompressionFormat = TEXTURECOMPRESSION_RGBA;
g_texture_globals.texture_components = GL_COMPRESSED_RGBA_ARB;
}
else
{
g_texture_globals.m_nTextureCompressionFormat = TEXTURECOMPRESSION_NONE;
g_texture_globals.texture_components = GL_RGBA;
}
}
break;
default:
globalOutputStream() << "Unknown texture compression selected, reverting\n";
g_texture_globals.m_nTextureCompressionFormat = TEXTURECOMPRESSION_NONE;
g_texture_globals.texture_components = GL_RGBA;
break;
}
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_tex_size); glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_tex_size);
if(max_tex_size == 0) if(max_tex_size == 0)
{ {
@ -596,29 +634,6 @@ void Textures_UpdateTextureCompressionFormat()
{ {
GLint texture_components = GL_RGBA; GLint texture_components = GL_RGBA;
if(!g_texturesmap->realised())
{
texture_components = g_texture_globals.m_nTextureCompressionFormat;
if(texture_components == TEXTURECOMPRESSION_NONE)
texture_components = GL_RGBA;
}
else
{
if (g_texture_globals.bTextureCompressionSupported)
{
if(g_texture_globals.m_nTextureCompressionFormat != TEXTURECOMPRESSION_NONE
&& g_texture_globals.m_nTextureCompressionFormat != TEXTURECOMPRESSION_RGBA
&& !g_texture_globals.m_bS3CompressionSupported)
{
globalOutputStream() << "OpenGL extension GL_EXT_texture_compression_s3tc not supported by current graphics drivers\n";
g_texture_globals.m_nTextureCompressionFormat = TEXTURECOMPRESSION_RGBA; // if this is not supported either, see below
}
if (g_texture_globals.m_nTextureCompressionFormat == TEXTURECOMPRESSION_RGBA && !g_texture_globals.m_bOpenGLCompressionSupported)
{
globalOutputStream() << "OpenGL extension GL_ARB_texture_compression not supported by current graphics drivers\n";
g_texture_globals.m_nTextureCompressionFormat = TEXTURECOMPRESSION_NONE;
}
switch (g_texture_globals.m_nTextureCompressionFormat) switch (g_texture_globals.m_nTextureCompressionFormat)
{ {
case (TEXTURECOMPRESSION_NONE): case (TEXTURECOMPRESSION_NONE):
@ -647,13 +662,6 @@ void Textures_UpdateTextureCompressionFormat()
break; break;
} }
} }
}
else
{
texture_components = GL_RGBA;
g_texture_globals.m_nTextureCompressionFormat = TEXTURECOMPRESSION_NONE;
}
}
Textures_setTextureComponents(texture_components); Textures_setTextureComponents(texture_components);
} }