43 lines
1.0 KiB
C++
43 lines
1.0 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; }
|
|
|
|
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
|