Fixing staging buffers not getting deleted
remove vgcore
This commit is contained in:
@@ -14,21 +14,24 @@ MaterialInstance::MaterialInstance(uint64 id,
|
||||
Array<std::string> params,
|
||||
uint32 uniformBinding,
|
||||
uint32 uniformSize)
|
||||
: id(id)
|
||||
, graphics(graphics)
|
||||
: graphics(graphics)
|
||||
, uniformBinding(uniformBinding)
|
||||
, id(id)
|
||||
{
|
||||
uniformBuffer = graphics->createUniformBuffer(UniformBufferCreateInfo{
|
||||
.sourceData = {
|
||||
.size = uniformSize,
|
||||
},
|
||||
.dynamic = true,
|
||||
}
|
||||
);
|
||||
if(uniformSize > 0)
|
||||
{
|
||||
uniformBuffer = graphics->createUniformBuffer(UniformBufferCreateInfo{
|
||||
.sourceData = {
|
||||
.size = uniformSize,
|
||||
},
|
||||
.dynamic = true,
|
||||
}
|
||||
);
|
||||
}
|
||||
uniformData.resize(uniformSize);
|
||||
ArchiveBuffer buffer(graphics);
|
||||
parameters.reserve(params.size());
|
||||
for (int i = 0; i < params.size(); ++i)
|
||||
for (size_t i = 0; i < params.size(); ++i)
|
||||
{
|
||||
Serialization::save(buffer, expressions[params[i]]);
|
||||
buffer.rewind();
|
||||
@@ -52,6 +55,14 @@ void MaterialInstance::updateDescriptor()
|
||||
{
|
||||
param->updateDescriptorSet(descriptor, uniformData.data());
|
||||
}
|
||||
if(uniformData.size() > 0)
|
||||
{
|
||||
uniformBuffer->updateContents(DataSource{
|
||||
.size = uniformData.size(),
|
||||
.data = uniformData.data(),
|
||||
});
|
||||
descriptor->updateBuffer(uniformBinding, uniformBuffer);
|
||||
}
|
||||
descriptor->writeChanges();
|
||||
}
|
||||
|
||||
@@ -62,13 +73,16 @@ Gfx::PDescriptorSet MaterialInstance::getDescriptorSet() const
|
||||
|
||||
void MaterialInstance::setBaseMaterial(PMaterialAsset asset)
|
||||
{
|
||||
uniformBuffer = graphics->createUniformBuffer(UniformBufferCreateInfo{
|
||||
.sourceData = {
|
||||
.size = uniformData.size(),
|
||||
},
|
||||
.dynamic = true,
|
||||
}
|
||||
);
|
||||
if(uniformData.size() > 0)
|
||||
{
|
||||
uniformBuffer = graphics->createUniformBuffer(UniformBufferCreateInfo{
|
||||
.sourceData = {
|
||||
.size = uniformData.size(),
|
||||
},
|
||||
.dynamic = true,
|
||||
}
|
||||
);
|
||||
}
|
||||
baseMaterial = asset;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "Asset/AssetRegistry.h"
|
||||
#include "Graphics/Graphics.h"
|
||||
#include "Graphics/Descriptor.h"
|
||||
#include <format>
|
||||
|
||||
using namespace Seele;
|
||||
|
||||
@@ -40,6 +41,10 @@ ShaderExpression::ShaderExpression(std::string key)
|
||||
{
|
||||
}
|
||||
|
||||
ShaderExpression::~ShaderExpression()
|
||||
{
|
||||
}
|
||||
|
||||
void ShaderExpression::save(ArchiveBuffer& buffer) const
|
||||
{
|
||||
Serialization::save(buffer, inputs);
|
||||
|
||||
@@ -38,6 +38,7 @@ struct ShaderExpression
|
||||
std::string key;
|
||||
ShaderExpression();
|
||||
ShaderExpression(std::string key);
|
||||
virtual ~ShaderExpression();
|
||||
virtual uint64 getIdentifier() const = 0;
|
||||
virtual std::string evaluate(Map<std::string, std::string>& varState) const = 0;
|
||||
virtual void save(ArchiveBuffer& buffer) const;
|
||||
@@ -216,14 +217,14 @@ struct MaterialNode
|
||||
void load(ArchiveBuffer& buffer);
|
||||
};
|
||||
template<>
|
||||
static void Serialization::save(ArchiveBuffer& buffer, const OShaderExpression& parameter)
|
||||
void Serialization::save(ArchiveBuffer& buffer, const OShaderExpression& parameter)
|
||||
{
|
||||
Serialization::save(buffer, parameter->getIdentifier());
|
||||
parameter->save(buffer);
|
||||
}
|
||||
|
||||
template<>
|
||||
static void Serialization::load(ArchiveBuffer& buffer, OShaderExpression& parameter)
|
||||
void Serialization::load(ArchiveBuffer& buffer, OShaderExpression& parameter)
|
||||
{
|
||||
uint64 identifier = 0;
|
||||
Serialization::load(buffer, identifier);
|
||||
@@ -269,14 +270,14 @@ static void Serialization::load(ArchiveBuffer& buffer, OShaderExpression& parame
|
||||
}
|
||||
|
||||
template<>
|
||||
static void Serialization::save(ArchiveBuffer& buffer, const OShaderParameter& parameter)
|
||||
void Serialization::save(ArchiveBuffer& buffer, const OShaderParameter& parameter)
|
||||
{
|
||||
Serialization::save(buffer, parameter->getIdentifier());
|
||||
parameter->save(buffer);
|
||||
}
|
||||
|
||||
template<>
|
||||
static void Serialization::load(ArchiveBuffer& buffer, OShaderParameter& parameter)
|
||||
void Serialization::load(ArchiveBuffer& buffer, OShaderParameter& parameter)
|
||||
{
|
||||
uint64 identifier = 0;
|
||||
Serialization::load(buffer, identifier);
|
||||
|
||||
Reference in New Issue
Block a user