gl: Do not rely on driver statistics for s3TC textures; they are inconsistent.

This commit is contained in:
kd-11 2018-11-29 13:20:51 +03:00 committed by kd-11
parent f1c3b46d60
commit b96ed5cd4e

View File

@ -1557,47 +1557,50 @@ namespace gl
m_depth = depth; m_depth = depth;
m_mipmaps = mipmaps; m_mipmaps = mipmaps;
GLenum query_target = (target == GL_TEXTURE_CUBE_MAP) ? GL_TEXTURE_CUBE_MAP_POSITIVE_X : target; switch (sized_format)
glGetTexLevelParameteriv(query_target, 0, GL_TEXTURE_COMPRESSED, (GLint*)&m_compressed);
if (m_compressed)
{ {
GLint compressed_size; case GL_DEPTH_COMPONENT16:
glGetTexLevelParameteriv(query_target, 0, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &compressed_size); {
m_pitch = compressed_size / height; m_pitch = width * 2;
break;
} }
else case GL_DEPTH24_STENCIL8:
case GL_DEPTH32F_STENCIL8:
{ {
switch (sized_format) m_pitch = width * 4;
{ break;
case GL_DEPTH_COMPONENT16: }
{ case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
m_pitch = width * 2; {
break; m_compressed = true;
} m_pitch = width / 2;
case GL_DEPTH24_STENCIL8: break;
case GL_DEPTH32F_STENCIL8: }
{ case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
m_pitch = width * 4; case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
break; {
} m_compressed = true;
default: m_pitch = width;
{ break;
GLint r, g, b, a; }
glGetTexLevelParameteriv(query_target, 0, GL_TEXTURE_RED_SIZE, &r); default:
glGetTexLevelParameteriv(query_target, 0, GL_TEXTURE_GREEN_SIZE, &g); {
glGetTexLevelParameteriv(query_target, 0, GL_TEXTURE_BLUE_SIZE, &b); GLenum query_target = (target == GL_TEXTURE_CUBE_MAP) ? GL_TEXTURE_CUBE_MAP_POSITIVE_X : target;
glGetTexLevelParameteriv(query_target, 0, GL_TEXTURE_ALPHA_SIZE, &a); GLint r, g, b, a;
m_pitch = width * (r + g + b + a) / 8; glGetTexLevelParameteriv(query_target, 0, GL_TEXTURE_RED_SIZE, &r);
break; glGetTexLevelParameteriv(query_target, 0, GL_TEXTURE_GREEN_SIZE, &g);
} glGetTexLevelParameteriv(query_target, 0, GL_TEXTURE_BLUE_SIZE, &b);
} glGetTexLevelParameteriv(query_target, 0, GL_TEXTURE_ALPHA_SIZE, &a);
if (!m_pitch) m_pitch = width * (r + g + b + a) / 8;
{ break;
fmt::throw_exception("Unhandled GL format 0x%X" HERE, sized_format); }
} }
if (!m_pitch)
{
fmt::throw_exception("Unhandled GL format 0x%X" HERE, sized_format);
} }
} }