Graphics/UberShader: Hotreload shader when an imported module is modified
This commit is contained in:
parent
fa54f1a3e4
commit
5382dd3ccd
|
|
@ -15,6 +15,7 @@
|
|||
#include <NZSL/ModuleResolver.hpp>
|
||||
#include <NZSL/Ast/Module.hpp>
|
||||
#include <unordered_map>
|
||||
#include <unordered_set>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
|
|
@ -70,6 +71,7 @@ namespace Nz
|
|||
|
||||
std::unordered_map<Config, std::shared_ptr<ShaderModule>, ConfigHasher, ConfigEqual> m_combinations;
|
||||
std::unordered_map<std::string, Option> m_optionIndexByName;
|
||||
std::unordered_set<std::string> m_usedModules;
|
||||
nzsl::Ast::ModulePtr m_shaderModule;
|
||||
ConfigCallback m_configCallback;
|
||||
nzsl::ShaderStageTypeFlags m_shaderStages;
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ namespace Nz
|
|||
|
||||
m_onShaderModuleUpdated.Connect(moduleResolver.OnModuleUpdated, [this, name = std::move(moduleName)](nzsl::ModuleResolver* resolver, const std::string& updatedModuleName)
|
||||
{
|
||||
if (updatedModuleName != name)
|
||||
if (m_usedModules.find(updatedModuleName) == m_usedModules.end())
|
||||
return;
|
||||
|
||||
nzsl::Ast::ModulePtr newShaderModule = resolver->Resolve(name);
|
||||
|
|
@ -120,6 +120,9 @@ namespace Nz
|
|||
sanitizeOptions.moduleResolver = Graphics::Instance()->GetShaderModuleResolver();
|
||||
|
||||
nzsl::Ast::ModulePtr sanitizedModule = nzsl::Ast::Sanitize(module, sanitizeOptions);
|
||||
m_usedModules.insert(sanitizedModule->metadata->moduleName);
|
||||
for (auto&& importedModule : sanitizedModule->importedModules)
|
||||
m_usedModules.insert(importedModule.module->metadata->moduleName);
|
||||
|
||||
nzsl::ShaderStageTypeFlags supportedStageType;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue