Files
Seele/src/Engine/Material/MaterialInstance.h
T

48 lines
1.4 KiB
C++
Raw Normal View History

2023-01-21 18:43:21 +01:00
#pragma once
2023-11-05 10:36:01 +01:00
#include "Asset/MaterialAsset.h"
2024-06-09 12:20:04 +02:00
#include "Graphics/Buffer.h"
#include "Material.h"
2023-01-21 18:43:21 +01:00
2024-06-09 12:20:04 +02:00
namespace Seele {
2024-06-18 19:19:05 +02:00
struct MaterialOffsets {
uint32 textureOffset;
uint32 samplerOffset;
uint32 floatOffset;
};
2024-06-09 12:20:04 +02:00
class MaterialInstance {
public:
2023-11-01 23:12:30 +01:00
MaterialInstance();
2024-06-09 12:20:04 +02:00
MaterialInstance(uint64 id, Gfx::PGraphics graphics, Array<OShaderExpression>& expressions, Array<std::string> params,
2024-06-18 19:19:05 +02:00
uint32 numTextures, uint32 numSamplers, uint32 numFloats);
2023-10-24 15:01:09 +02:00
~MaterialInstance();
void updateDescriptor();
2023-11-05 10:36:01 +01:00
PMaterial getBaseMaterial() const { return baseMaterial->getMaterial(); }
2023-10-24 15:01:09 +02:00
uint64 getId() const { return id; }
2023-11-01 13:38:49 +01:00
2023-11-05 10:36:01 +01:00
void setBaseMaterial(PMaterialAsset asset);
2024-06-18 19:19:05 +02:00
MaterialOffsets getMaterialOffsets() const {
return MaterialOffsets{
.textureOffset = texturesOffset,
.samplerOffset = samplersOffset,
.floatOffset = floatBufferOffset,
};
}
2023-11-05 10:36:01 +01:00
2023-11-01 13:38:49 +01:00
void save(ArchiveBuffer& buffer) const;
void load(ArchiveBuffer& buffer);
2024-06-09 12:20:04 +02:00
private:
2023-10-24 15:01:09 +02:00
Gfx::PGraphics graphics;
2023-11-01 23:12:30 +01:00
Array<OShaderParameter> parameters;
2024-06-18 19:19:05 +02:00
uint32 numTextures;
uint32 numSamplers;
uint32 numFloats;
uint32 texturesOffset;
uint32 samplersOffset;
uint32 floatBufferOffset;
2023-10-24 15:01:09 +02:00
Gfx::PDescriptorSet descriptor;
2023-11-05 10:36:01 +01:00
PMaterialAsset baseMaterial;
2023-10-24 15:01:09 +02:00
uint64 id;
2023-01-21 18:43:21 +01:00
};
DEFINE_REF(MaterialInstance)
} // namespace Seele