瀏覽代碼

Fix Shader and ShaderInclude resource loading

(cherry picked from commit 26e3443eef49a7189eba5e1648ae7be13d95afd2)
bitsawer 2 年之前
父節點
當前提交
a606b03fd7
共有 2 個文件被更改,包括 16 次插入10 次删除
  1. 8 5
      scene/resources/shader.cpp
  2. 8 5
      scene/resources/shader_include.cpp

+ 8 - 5
scene/resources/shader.cpp

@@ -234,13 +234,16 @@ Ref<Resource> ResourceFormatLoaderShader::load(const String &p_path, const Strin
 		*r_error = ERR_FILE_CANT_OPEN;
 	}
 
-	Ref<Shader> shader;
-	shader.instantiate();
-
-	Vector<uint8_t> buffer = FileAccess::get_file_as_bytes(p_path);
+	Error error = OK;
+	Vector<uint8_t> buffer = FileAccess::get_file_as_bytes(p_path, &error);
+	ERR_FAIL_COND_V_MSG(error, nullptr, "Cannot load shader: " + p_path);
 
 	String str;
-	str.parse_utf8((const char *)buffer.ptr(), buffer.size());
+	error = str.parse_utf8((const char *)buffer.ptr(), buffer.size());
+	ERR_FAIL_COND_V_MSG(error, nullptr, "Cannot parse shader: " + p_path);
+
+	Ref<Shader> shader;
+	shader.instantiate();
 
 	shader->set_include_path(p_path);
 	shader->set_code(str);

+ 8 - 5
scene/resources/shader_include.cpp

@@ -88,13 +88,16 @@ Ref<Resource> ResourceFormatLoaderShaderInclude::load(const String &p_path, cons
 		*r_error = ERR_FILE_CANT_OPEN;
 	}
 
-	Ref<ShaderInclude> shader_inc;
-	shader_inc.instantiate();
-
-	Vector<uint8_t> buffer = FileAccess::get_file_as_bytes(p_path);
+	Error error = OK;
+	Vector<uint8_t> buffer = FileAccess::get_file_as_bytes(p_path, &error);
+	ERR_FAIL_COND_V_MSG(error, nullptr, "Cannot load shader include: " + p_path);
 
 	String str;
-	str.parse_utf8((const char *)buffer.ptr(), buffer.size());
+	error = str.parse_utf8((const char *)buffer.ptr(), buffer.size());
+	ERR_FAIL_COND_V_MSG(error, nullptr, "Cannot parse shader include: " + p_path);
+
+	Ref<ShaderInclude> shader_inc;
+	shader_inc.instantiate();
 
 	shader_inc->set_include_path(p_path);
 	shader_inc->set_code(str);