From 9507f334d161490841b103cd8ae0e45eda82fee8 Mon Sep 17 00:00:00 2001 From: divverent Date: Wed, 29 Apr 2009 17:02:37 +0000 Subject: [PATCH] fix greyscaling bug in texture compression git-svn-id: svn://svn.icculus.org/netradiant/trunk@358 61c419a2-8eb2-4b30-bcec-8cead039b335 --- radiant/textures.cpp | 110 +++++++++++++++++++++++-------------------- 1 file changed, 59 insertions(+), 51 deletions(-) diff --git a/radiant/textures.cpp b/radiant/textures.cpp index ff7d27db..e7ff7e42 100644 --- a/radiant/textures.cpp +++ b/radiant/textures.cpp @@ -487,6 +487,44 @@ public: 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); if(max_tex_size == 0) { @@ -596,62 +634,32 @@ void Textures_UpdateTextureCompressionFormat() { GLint texture_components = GL_RGBA; - if(!g_texturesmap->realised()) + switch (g_texture_globals.m_nTextureCompressionFormat) { - texture_components = g_texture_globals.m_nTextureCompressionFormat; - if(texture_components == TEXTURECOMPRESSION_NONE) + case (TEXTURECOMPRESSION_NONE): + { texture_components = GL_RGBA; - } - else - { - if (g_texture_globals.bTextureCompressionSupported) + break; + } + case (TEXTURECOMPRESSION_RGBA): { - 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) - { - case (TEXTURECOMPRESSION_NONE): - { - texture_components = GL_RGBA; - break; - } - case (TEXTURECOMPRESSION_RGBA): - { - texture_components = GL_COMPRESSED_RGBA_ARB; - break; - } - case (TEXTURECOMPRESSION_RGBA_S3TC_DXT1): - { - texture_components = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; - break; - } - case (TEXTURECOMPRESSION_RGBA_S3TC_DXT3): - { - texture_components = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; - break; - } - case (TEXTURECOMPRESSION_RGBA_S3TC_DXT5): - { - texture_components = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; - break; - } - } + texture_components = GL_COMPRESSED_RGBA_ARB; + break; } - else + case (TEXTURECOMPRESSION_RGBA_S3TC_DXT1): { - texture_components = GL_RGBA; - g_texture_globals.m_nTextureCompressionFormat = TEXTURECOMPRESSION_NONE; + texture_components = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; + break; + } + case (TEXTURECOMPRESSION_RGBA_S3TC_DXT3): + { + texture_components = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; + break; + } + case (TEXTURECOMPRESSION_RGBA_S3TC_DXT5): + { + texture_components = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; + break; } } -- 2.39.2