#pragma once #include #include #include #include #include #include #include #include #include namespace extra2d { class AssetDependencyGraph { public: void clear(); void registerDependency(Handle material, Handle texture); void registerDependency(Handle material, Handle shader); void notifyTextureReloaded( Handle texture, const std::function)> &onMaterialUpdate) const; void notifyShaderReloaded( Handle shader, const std::function)> &onMaterialUpdate) const; private: struct TextureDeps { Handle texture; std::vector> materials; }; struct ShaderDeps { Handle shader; std::vector> materials; }; std::unordered_map textureDeps_; std::unordered_map shaderDeps_; mutable std::shared_mutex mutex_; }; } // namespace extra2d