From 1cf2a41cd7460f631cb5ea830b53d442bd2bddc3 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sat, 6 Dec 2014 20:52:51 +0000 Subject: [PATCH] Fix display of mips, GL_NEAREST_MIPMAP_NEAREST is required * If GL_NEAREST is specified it means the whole mip chain is locked off, even if we do textureLod in the shader. * Instead, go back to using GL_NEAREST_MIPMAP_NEAREST and clamp the MAX_LEVEL to make the texture mipmap complete when necessary. --- renderdoc/driver/gl/gl_debug.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/renderdoc/driver/gl/gl_debug.cpp b/renderdoc/driver/gl/gl_debug.cpp index 38f900b5d..62f428fef 100644 --- a/renderdoc/driver/gl/gl_debug.cpp +++ b/renderdoc/driver/gl/gl_debug.cpp @@ -189,7 +189,7 @@ void GLReplay::InitDebugData() gl.glSamplerParameteri(DebugData.linearSampler, eGL_TEXTURE_WRAP_T, eGL_CLAMP_TO_EDGE); gl.glGenSamplers(1, &DebugData.pointSampler); - gl.glSamplerParameteri(DebugData.pointSampler, eGL_TEXTURE_MIN_FILTER, eGL_NEAREST); + gl.glSamplerParameteri(DebugData.pointSampler, eGL_TEXTURE_MIN_FILTER, eGL_NEAREST_MIPMAP_NEAREST); gl.glSamplerParameteri(DebugData.pointSampler, eGL_TEXTURE_MAG_FILTER, eGL_NEAREST); gl.glSamplerParameteri(DebugData.pointSampler, eGL_TEXTURE_WRAP_S, eGL_CLAMP_TO_EDGE); gl.glSamplerParameteri(DebugData.pointSampler, eGL_TEXTURE_WRAP_T, eGL_CLAMP_TO_EDGE); @@ -791,14 +791,22 @@ bool GLReplay::RenderTexture(TextureDisplay cfg) int maxlevel = -1; + int clampmaxlevel = m_CachedTextures[cfg.texid].mips - 1; + + gl.glGetTextureParameterivEXT(texname, target, eGL_TEXTURE_MAX_LEVEL, (GLint *)&maxlevel); + + // need to ensure texture is mipmap complete by clamping TEXTURE_MAX_LEVEL. + if(clampmaxlevel != maxlevel) + { + gl.glTextureParameterivEXT(texname, target, eGL_TEXTURE_MAX_LEVEL, (GLint *)&clampmaxlevel); + } + else + { + maxlevel = -1; + } + if(cfg.mip == 0 && cfg.scale < 1.0f && dsTexMode == eGL_NONE && resType != eGL_TEXTURE_BUFFER) { - gl.glGetTextureParameterivEXT(texname, target, eGL_TEXTURE_MAX_LEVEL, (GLint *)&maxlevel); - - // need to ensure texture is mipmap complete by clamping TEXTURE_MAX_LEVEL. - int clampmaxlevel = m_CachedTextures[cfg.texid].mips - 1; - gl.glTextureParameterivEXT(texname, target, eGL_TEXTURE_MAX_LEVEL, (GLint *)&clampmaxlevel); - gl.glBindSampler(resType, DebugData.linearSampler); } else