Files
Destrum/destrum/include/destrum/Graphics/MaterialCache.h
2026-01-21 06:05:35 +01:00

47 lines
1.2 KiB
C++

#ifndef MATERIALCACHE_H
#define MATERIALCACHE_H
#include <vector>
#include <destrum/Graphics/ids.h>
#include <destrum/Graphics/Material.h>
#include <destrum/Graphics/Resources/Buffer.h>
class GfxDevice;
class MaterialCache {
friend class ResourcesInspector;
public:
void init(GfxDevice& gfxDevice);
void cleanup(GfxDevice& gfxDevice);
MaterialID addMaterial(GfxDevice& gfxDevice, Material material);
const Material& getMaterial(MaterialID id) const;
MaterialID getFreeMaterialId() const;
MaterialID getPlaceholderMaterialId() const;
const GPUBuffer& getMaterialDataBuffer() const { return materialDataBuffer; }
VkDeviceAddress getMaterialDataBufferAddress() const { return materialDataBuffer.address; }
Material& getMaterialMutable(MaterialID id);
void updateMaterialGPU(GfxDevice& gfxDevice, MaterialID id);
private:
std::vector<Material> materials;
static const auto MAX_MATERIALS = 1000;
GPUBuffer materialDataBuffer;
// material which is used for meshes without materials
MaterialID placeholderMaterialId{NULL_MATERIAL_ID};
ImageID defaultNormalMapTextureID{NULL_IMAGE_ID};
};
#endif //MATERIALCACHE_H