Extra2D/include/assets/deps/asset_dependency_tracker.h

42 lines
1.1 KiB
C
Raw Normal View History

#pragma once
#include <assets/handle.h>
#include <renderer/material.h>
#include <renderer/shader.h>
#include <renderer/texture.h>
#include <functional>
#include <mutex>
#include <shared_mutex>
#include <unordered_map>
#include <vector>
namespace extra2d {
class AssetDependencyTracker {
public:
struct DependencyInfo {
Handle<Texture> texture;
Handle<Shader> shader;
std::vector<Handle<Material>> dependentMaterials;
};
void clear();
void registerMaterialDependency(Handle<Material> material,
Handle<Texture> texture);
void registerMaterialDependency(Handle<Material> material,
Handle<Shader> shader);
void notifyTextureReloaded(
Handle<Texture> texture,
const std::function<void(Handle<Material>)> &onMaterialUpdate) const;
void notifyShaderReloaded(
Handle<Shader> shader,
const std::function<void(Handle<Material>)> &onMaterialUpdate) const;
private:
std::unordered_map<uint32_t, DependencyInfo> textureDependencies_;
std::unordered_map<uint32_t, DependencyInfo> shaderDependencies_;
mutable std::shared_mutex mutex_;
};
} // namespace extra2d