compiles again

This commit is contained in:
Dynamitos
2023-11-05 10:36:01 +01:00
parent 4746c0f838
commit 77eb92838c
112 changed files with 1717 additions and 1540 deletions
+35 -18
View File
@@ -8,17 +8,34 @@ MaterialInstance::MaterialInstance()
{
}
MaterialInstance::MaterialInstance(uint64 id, Gfx::PGraphics graphics, PMaterial baseMaterial, Gfx::PDescriptorLayout layout, Array<OShaderParameter> params, uint32 uniformBinding, uint32 uniformSize)
: id(id), graphics(graphics), baseMaterial(baseMaterial), layout(layout), parameters(params), uniformBinding(uniformBinding)
MaterialInstance::MaterialInstance(uint64 id,
Gfx::PGraphics graphics,
Map<std::string, OShaderExpression>& expressions,
Array<std::string> params,
uint32 uniformBinding,
uint32 uniformSize)
: id(id)
, graphics(graphics)
, uniformBinding(uniformBinding)
{
uniformBuffer = graphics->createUniformBuffer(UniformBufferCreateInfo{
.sourceData = {
.size = uniformSize,
},
.bDynamic = true,
.dynamic = true,
}
);
uniformData.resize(uniformSize);
ArchiveBuffer buffer(graphics);
parameters.reserve(params.size());
for (int i = 0; i < params.size(); ++i)
{
Serialization::save(buffer, params[i]);
buffer.rewind();
OShaderParameter param;
Serialization::load(buffer, param);
parameters.add(std::move(param));
}
}
MaterialInstance::~MaterialInstance()
@@ -28,6 +45,8 @@ MaterialInstance::~MaterialInstance()
void MaterialInstance::updateDescriptor()
{
Gfx::PDescriptorLayout layout = baseMaterial->getMaterial()->getDescriptorLayout();
layout->reset();
descriptor = layout->allocateDescriptorSet();
for (auto& param : parameters)
{
@@ -36,16 +55,27 @@ void MaterialInstance::updateDescriptor()
descriptor->writeChanges();
}
Gfx::PDescriptorSet Seele::MaterialInstance::getDescriptorSet() const
Gfx::PDescriptorSet MaterialInstance::getDescriptorSet() const
{
return descriptor;
}
void MaterialInstance::setBaseMaterial(PMaterialAsset asset)
{
uniformBuffer = graphics->createUniformBuffer(UniformBufferCreateInfo{
.sourceData = {
.size = uniformData.size(),
},
.dynamic = true,
}
);
baseMaterial = asset;
}
void MaterialInstance::save(ArchiveBuffer& buffer) const
{
Serialization::save(buffer, uniformData);
Serialization::save(buffer, uniformBinding);
Serialization::save(buffer, uniformBuffer);
Serialization::save(buffer, parameters);
Serialization::save(buffer, id);
}
@@ -55,19 +85,6 @@ void MaterialInstance::load(ArchiveBuffer& buffer)
graphics = buffer.getGraphics();
Serialization::load(buffer, uniformData);
Serialization::load(buffer, uniformBinding);
Serialization::load(buffer, uniformBuffer);
Serialization::load(buffer, parameters);
Serialization::load(buffer, id);
}
void MaterialInstance::setBaseMaterial(PMaterial material)
{
layout = material->getDescriptorLayout();
baseMaterial = material;
descriptor = layout->allocateDescriptorSet();
for (auto& param : parameters)
{
param->updateDescriptorSet(descriptor, uniformData.data());
}
descriptor->writeChanges();
}