From 4ed6e4a70e0396667821d217971b124e0e22c3dc Mon Sep 17 00:00:00 2001 From: Evgeny Zuev Date: Mon, 24 Jul 2017 18:24:10 +0700 Subject: [PATCH] Fix switching SRGB extension happen before binding of texture Previously, texture parameter `_TEXTURE_SRGB_DECODE_EXT` was changed before the call of `glBindTexture`, which caused modification of previously bound texture instead of desired one. Now it's changed after `glBindTexture`. --- drivers/gles3/rasterizer_scene_gles3.cpp | 48 ++++++++++++------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp index 56bd3ca2ef..21bdb217fc 100644 --- a/drivers/gles3/rasterizer_scene_gles3.cpp +++ b/drivers/gles3/rasterizer_scene_gles3.cpp @@ -1243,36 +1243,36 @@ bool RasterizerSceneGLES3::_setup_material(RasterizerStorageGLES3::Material *p_m if (t->render_target) t->render_target->used_in_frame = true; - if (storage->config.srgb_decode_supported) { - //if SRGB decode extension is present, simply switch the texture to whathever is needed - bool must_srgb = false; - - if (t->srgb && (texture_hints[i] == ShaderLanguage::ShaderNode::Uniform::HINT_ALBEDO || texture_hints[i] == ShaderLanguage::ShaderNode::Uniform::HINT_BLACK_ALBEDO)) { - must_srgb = true; - } - - if (t->using_srgb != must_srgb) { - if (must_srgb) { - glTexParameteri(t->target, _TEXTURE_SRGB_DECODE_EXT, _DECODE_EXT); -#ifdef TOOLS_ENABLED - if (t->detect_srgb) { - t->detect_srgb(t->detect_srgb_ud); - } -#endif - - } else { - glTexParameteri(t->target, _TEXTURE_SRGB_DECODE_EXT, _SKIP_DECODE_EXT); - } - t->using_srgb = must_srgb; - } - } - target = t->target; tex = t->tex_id; } glBindTexture(target, tex); + if (t && storage->config.srgb_decode_supported) { + //if SRGB decode extension is present, simply switch the texture to whathever is needed + bool must_srgb = false; + + if (t->srgb && (texture_hints[i] == ShaderLanguage::ShaderNode::Uniform::HINT_ALBEDO || texture_hints[i] == ShaderLanguage::ShaderNode::Uniform::HINT_BLACK_ALBEDO)) { + must_srgb = true; + } + + if (t->using_srgb != must_srgb) { + if (must_srgb) { + glTexParameteri(t->target, _TEXTURE_SRGB_DECODE_EXT, _DECODE_EXT); +#ifdef TOOLS_ENABLED + if (t->detect_srgb) { + t->detect_srgb(t->detect_srgb_ud); + } +#endif + + } else { + glTexParameteri(t->target, _TEXTURE_SRGB_DECODE_EXT, _SKIP_DECODE_EXT); + } + t->using_srgb = must_srgb; + } + } + if (i == 0) { state.current_main_tex = tex; }