From 22c42d4e361b1d83b17acf139e92e341f1c1d0eb Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 1 Dec 2014 22:08:41 +0000 Subject: [PATCH] If we're going to linear sample, make sure tex is mipmap complete --- renderdoc/driver/gl/gl_debug.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/gl/gl_debug.cpp b/renderdoc/driver/gl/gl_debug.cpp index 72df80d8e..ddedc92c2 100644 --- a/renderdoc/driver/gl/gl_debug.cpp +++ b/renderdoc/driver/gl/gl_debug.cpp @@ -684,11 +684,23 @@ bool GLReplay::RenderTexture(TextureDisplay cfg) gl.glTexParameteri(target, eGL_DEPTH_STENCIL_TEXTURE_MODE, dsTexMode); } - if(cfg.mip == 0 && cfg.scale < 1.0f && dsTexMode == eGL_NONE) - gl.glBindSampler(resType, DebugData.linearSampler); - else - gl.glBindSampler(resType, DebugData.pointSampler); + int maxlevel = -1; + if(cfg.mip == 0 && cfg.scale < 1.0f && dsTexMode == eGL_NONE) + { + 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 + { + gl.glBindSampler(resType, DebugData.pointSampler); + } + GLint tex_x = texDetails.width, tex_y = texDetails.height, tex_z = texDetails.depth; gl.glBindBufferBase(eGL_UNIFORM_BUFFER, 0, DebugData.UBOs[0]); @@ -796,6 +808,9 @@ bool GLReplay::RenderTexture(TextureDisplay cfg) gl.glBindVertexArray(DebugData.emptyVAO); gl.glDrawArrays(eGL_TRIANGLE_STRIP, 0, 4); + if(maxlevel >= 0) + gl.glTextureParameterivEXT(texname, target, eGL_TEXTURE_MAX_LEVEL, (GLint *)&maxlevel); + gl.glBindSampler(0, 0); if (dsTexMode != eGL_NONE)