From 905c10bc5415c6659412d6b3e429660e7c8ca2ba Mon Sep 17 00:00:00 2001 From: bitsawer Date: Mon, 10 Jul 2023 16:31:01 +0300 Subject: [PATCH] Fix shader type detection --- scene/resources/shader.cpp | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/scene/resources/shader.cpp b/scene/resources/shader.cpp index 62c2483a930e..361a28194fc5 100644 --- a/scene/resources/shader.cpp +++ b/scene/resources/shader.cpp @@ -66,20 +66,6 @@ void Shader::set_code(const String &p_code) { E->disconnect(SNAME("changed"), callable_mp(this, &Shader::_dependency_changed)); } - String type = ShaderLanguage::get_shader_type(p_code); - - if (type == "canvas_item") { - mode = MODE_CANVAS_ITEM; - } else if (type == "particles") { - mode = MODE_PARTICLES; - } else if (type == "sky") { - mode = MODE_SKY; - } else if (type == "fog") { - mode = MODE_FOG; - } else { - mode = MODE_SPATIAL; - } - code = p_code; String pp_code = p_code; @@ -100,6 +86,21 @@ void Shader::set_code(const String &p_code) { } } + // Try to get the shader type from the final, fully preprocessed shader code. + String type = ShaderLanguage::get_shader_type(pp_code); + + if (type == "canvas_item") { + mode = MODE_CANVAS_ITEM; + } else if (type == "particles") { + mode = MODE_PARTICLES; + } else if (type == "sky") { + mode = MODE_SKY; + } else if (type == "fog") { + mode = MODE_FOG; + } else { + mode = MODE_SPATIAL; + } + for (const Ref &E : include_dependencies) { E->connect(SNAME("changed"), callable_mp(this, &Shader::_dependency_changed)); }