Browse Source

Fix shader type detection

(cherry picked from commit 905c10bc5415c6659412d6b3e429660e7c8ca2ba)
bitsawer 2 years ago
parent
commit
143963d122
1 changed files with 15 additions and 14 deletions
  1. 15 14
      scene/resources/shader.cpp

+ 15 - 14
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));
 	}