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
|