Files
Seele/src/Engine/Material/Material.h
T
2024-05-17 18:08:11 +02:00

50 lines
1.4 KiB
C++

#pragma once
#include "ShaderExpression.h"
#include "Graphics/Descriptor.h"
namespace Seele
{
DECLARE_REF(MaterialInstance)
class Material
{
public:
Material();
Material(Gfx::PGraphics graphics,
Gfx::ODescriptorLayout layout,
uint32 uniformDataSize,
uint32 uniformBinding,
std::string materialName,
Array<OShaderExpression> expressions,
Array<std::string> parameter,
MaterialNode brdf);
~Material();
const Gfx::PDescriptorLayout getDescriptorLayout() const { return layout; }
Gfx::PDescriptorLayout getDescriptorLayout() { return layout; }
OMaterialInstance instantiate();
const std::string& getName() const { return materialName; }
constexpr uint64 getId() const { return materialId; }
static constexpr const PMaterial findMaterialById(uint64 id) { return materials[id]; }
void save(ArchiveBuffer& buffer) const;
void load(ArchiveBuffer& buffer);
void compile();
private:
Gfx::PGraphics graphics;
uint32 uniformDataSize;
uint32 uniformBinding;
uint64 instanceId;
uint64 materialId;
Gfx::ODescriptorLayout layout;
std::string materialName;
Array<OShaderExpression> codeExpressions;
Array<std::string> parameters;
MaterialNode brdf;
static std::atomic_uint64_t materialIdCounter;
static Array<PMaterial> materials;
};
DEFINE_REF(Material)
} // namespace Seele