#pragma once #include #include #include #include #include #include #include #include #include namespace extra2d { class AssetDependencyTracker { public: struct DependencyInfo { Handle texture; Handle shader; std::vector> dependentMaterials; }; void clear(); void registerMaterialDependency(Handle material, Handle texture); void registerMaterialDependency(Handle material, Handle shader); void notifyTextureReloaded( Handle texture, const std::function)> &onMaterialUpdate) const; void notifyShaderReloaded( Handle shader, const std::function)> &onMaterialUpdate) const; private: std::unordered_map textureDependencies_; std::unordered_map shaderDependencies_; mutable std::shared_mutex mutex_; }; } // namespace extra2d