diff options
Diffstat (limited to 'scene/resources/shader_include.cpp')
-rw-r--r-- | scene/resources/shader_include.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/scene/resources/shader_include.cpp b/scene/resources/shader_include.cpp index 68137cbec0..6e9c64d34b 100644 --- a/scene/resources/shader_include.cpp +++ b/scene/resources/shader_include.cpp @@ -37,10 +37,9 @@ void ShaderInclude::_dependency_changed() { } void ShaderInclude::set_code(const String &p_code) { - HashSet<Ref<ShaderInclude>> new_dependencies; code = p_code; - for (Ref<ShaderInclude> E : dependencies) { + for (const Ref<ShaderInclude> &E : dependencies) { E->disconnect(SNAME("changed"), callable_mp(this, &ShaderInclude::_dependency_changed)); } @@ -51,14 +50,16 @@ void ShaderInclude::set_code(const String &p_code) { } String pp_code; + HashSet<Ref<ShaderInclude>> new_dependencies; ShaderPreprocessor preprocessor; - preprocessor.preprocess(p_code, path, pp_code, nullptr, nullptr, nullptr, &new_dependencies); + Error result = preprocessor.preprocess(p_code, path, pp_code, nullptr, nullptr, nullptr, &new_dependencies); + if (result == OK) { + // This ensures previous include resources are not freed and then re-loaded during parse (which would make compiling slower) + dependencies = new_dependencies; + } } - // This ensures previous include resources are not freed and then re-loaded during parse (which would make compiling slower) - dependencies = new_dependencies; - - for (Ref<ShaderInclude> E : dependencies) { + for (const Ref<ShaderInclude> &E : dependencies) { E->connect(SNAME("changed"), callable_mp(this, &ShaderInclude::_dependency_changed)); } |