Просмотр исходного кода

resource: stop merging static_compile

Fixes: #352
Daniele Bartolini 10 месяцев назад
Родитель
Сommit
1c436b0d82
2 измененных файлов с 11 добавлено и 8 удалено
  1. 1 0
      docs/changelog.rst
  2. 10 8
      src/resource/shader_resource.cpp

+ 1 - 0
docs/changelog.rst

@@ -13,6 +13,7 @@ Changelog
 * HTML5: fixed GL_INVALID_OPERATION (or missing geometry) when rendering untextured meshes.
 * HTML5: fixed GL_INVALID_OPERATION (or missing geometry) when rendering untextured meshes.
 * Data Compiler: fixed shaders not including code in some circumnstances.
 * Data Compiler: fixed shaders not including code in some circumnstances.
 * Lua API: added an optional exit_code parameter to ``Device.quit()``.
 * Lua API: added an optional exit_code parameter to ``Device.quit()``.
+* Data Compiler: fixed 'static_compile' being visible to external shader resources.
 
 
 0.55.0 --- 03 Apr 2025
 0.55.0 --- 03 Apr 2025
 ----------------------
 ----------------------

+ 10 - 8
src/resource/shader_resource.cpp

@@ -823,7 +823,7 @@ namespace shader_resource_internal
 			_opts.temporary_path(_fs_out_path, "fs_out.bin");
 			_opts.temporary_path(_fs_out_path, "fs_out.bin");
 		}
 		}
 
 
-		s32 parse(const char *path)
+		s32 parse(const char *path, bool is_include)
 		{
 		{
 			TempAllocator256 ta;
 			TempAllocator256 ta;
 			DynamicString path_str(ta);
 			DynamicString path_str(ta);
@@ -832,13 +832,13 @@ namespace shader_resource_internal
 			if (hash_set::has(_parsed_includes, path_str))
 			if (hash_set::has(_parsed_includes, path_str))
 				return 0;
 				return 0;
 
 
-			s32 err = parse(_opts.read(path));
+			s32 err = parse(_opts.read(path), is_include);
 			ENSURE_OR_RETURN(err == 0, _opts);
 			ENSURE_OR_RETURN(err == 0, _opts);
 			hash_set::insert(_parsed_includes, path_str);
 			hash_set::insert(_parsed_includes, path_str);
 			return err;
 			return err;
 		}
 		}
 
 
-		s32 parse(Buffer buf)
+		s32 parse(Buffer buf, bool is_include)
 		{
 		{
 			TempAllocator4096 ta;
 			TempAllocator4096 ta;
 			JsonObject obj(ta);
 			JsonObject obj(ta);
@@ -851,7 +851,7 @@ namespace shader_resource_internal
 				for (u32 i = 0; i < array::size(arr); ++i) {
 				for (u32 i = 0; i < array::size(arr); ++i) {
 					DynamicString path(ta);
 					DynamicString path(ta);
 					RETURN_IF_ERROR(sjson::parse_string(path, arr[i]), _opts);
 					RETURN_IF_ERROR(sjson::parse_string(path, arr[i]), _opts);
-					s32 err = parse(path.c_str());
+					s32 err = parse(path.c_str(), true);
 					ENSURE_OR_RETURN(err == 0, _opts);
 					ENSURE_OR_RETURN(err == 0, _opts);
 				}
 				}
 			}
 			}
@@ -876,9 +876,11 @@ namespace shader_resource_internal
 				ENSURE_OR_RETURN(err == 0, _opts);
 				ENSURE_OR_RETURN(err == 0, _opts);
 			}
 			}
 
 
-			if (json_object::has(obj, "static_compile")) {
-				s32 err = parse_static_compile(obj["static_compile"]);
-				ENSURE_OR_RETURN(err == 0, _opts);
+			if (!is_include) { // Do not merge static_compile entries.
+				if (json_object::has(obj, "static_compile")) {
+					s32 err = parse_static_compile(obj["static_compile"]);
+					ENSURE_OR_RETURN(err == 0, _opts);
+				}
 			}
 			}
 
 
 			return 0;
 			return 0;
@@ -1830,7 +1832,7 @@ namespace shader_resource_internal
 	s32 compile(CompileOptions &opts)
 	s32 compile(CompileOptions &opts)
 	{
 	{
 		ShaderCompiler sc(opts);
 		ShaderCompiler sc(opts);
-		s32 err = sc.parse(opts.source_path());
+		s32 err = sc.parse(opts.source_path(), false);
 		ENSURE_OR_RETURN(err == 0, opts);
 		ENSURE_OR_RETURN(err == 0, opts);
 
 
 		return sc.compile();
 		return sc.compile();