diff options
author | bitsawer <sawerduster@gmail.com> | 2023-07-10 16:31:01 +0300 |
---|---|---|
committer | bitsawer <sawerduster@gmail.com> | 2023-07-10 17:44:39 +0300 |
commit | 905c10bc5415c6659412d6b3e429660e7c8ca2ba (patch) | |
tree | 3a17e801739caee190d4482a69e79687c2265338 /scene/resources/shader.cpp | |
parent | b8ed596769d2114797015833ce86f86ee872ecfa (diff) | |
download | redot-engine-905c10bc5415c6659412d6b3e429660e7c8ca2ba.tar.gz |
Fix shader type detection
Diffstat (limited to 'scene/resources/shader.cpp')
-rw-r--r-- | scene/resources/shader.cpp | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/scene/resources/shader.cpp b/scene/resources/shader.cpp index 62c2483a93..361a28194f 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<ShaderInclude> &E : include_dependencies) { E->connect(SNAME("changed"), callable_mp(this, &Shader::_dependency_changed)); } |