No more shared pointers
This commit is contained in:
@@ -4,11 +4,15 @@
|
||||
|
||||
using namespace Seele;
|
||||
|
||||
MaterialInstance::MaterialInstance(uint64 id, Gfx::PGraphics graphics, PMaterial baseMaterial, Gfx::PDescriptorLayout descriptor, Array<PShaderParameter> params, uint32 uniformBinding, uint32 uniformSize)
|
||||
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)
|
||||
{
|
||||
uniformBuffer = graphics->createUniformBuffer(UniformBufferCreateInfo{
|
||||
.resourceData = {
|
||||
.sourceData = {
|
||||
.size = uniformSize,
|
||||
},
|
||||
.bDynamic = true,
|
||||
@@ -25,7 +29,7 @@ MaterialInstance::~MaterialInstance()
|
||||
void MaterialInstance::updateDescriptor()
|
||||
{
|
||||
descriptor = layout->allocateDescriptorSet();
|
||||
for (auto param : parameters)
|
||||
for (auto& param : parameters)
|
||||
{
|
||||
param->updateDescriptorSet(descriptor, uniformData.data());
|
||||
}
|
||||
@@ -43,20 +47,27 @@ void MaterialInstance::save(ArchiveBuffer& buffer) const
|
||||
Serialization::save(buffer, uniformBinding);
|
||||
Serialization::save(buffer, uniformBuffer);
|
||||
Serialization::save(buffer, parameters);
|
||||
Serialization::save(buffer, layout);
|
||||
Serialization::save(buffer, descriptor);
|
||||
Serialization::save(buffer, baseMaterial);
|
||||
Serialization::save(buffer, id);
|
||||
}
|
||||
|
||||
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, layout);
|
||||
Serialization::load(buffer, descriptor);
|
||||
Serialization::load(buffer, baseMaterial);
|
||||
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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user