Fix shader type detection

(cherry picked from commit 905c10bc54)
This commit is contained in:
bitsawer 2023-07-10 16:31:01 +03:00 committed by Yuri Sizov
parent 01511caaf1
commit 143963d122
1 changed files with 15 additions and 14 deletions

View File

@ -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));
}