Fix particle emitter function cache clearing for GPU shader generation

#1640
This commit is contained in:
Wojtek Figat
2023-10-12 19:55:50 +02:00
parent 6f7f22eb47
commit d52412c5c3
2 changed files with 11 additions and 14 deletions

View File

@@ -30,10 +30,10 @@ void ParticleEmitterGraphGPU::ClearCache()
{
for (int32 i = 0; i < Nodes.Count(); i++)
{
auto& node = Nodes[i];
ParticleEmitterGraphGPUNode& node = Nodes.Get()[i];
for (int32 j = 0; j < node.Boxes.Count(); j++)
{
node.Boxes[j].Cache.Clear();
node.Boxes.Get()[j].Cache.Clear();
}
}
}
@@ -86,9 +86,7 @@ bool ParticleEmitterGPUGenerator::Generate(WriteStream& source, BytesContainer&
auto& layout = baseGraph->Layout;
_attributeValues.Resize(layout.Attributes.Count());
for (int32 i = 0; i < _attributeValues.Count(); i++)
{
_attributeValues[i] = AttributeCache();
}
_contextUsesKill = false;
// Cache attributes
@@ -112,7 +110,7 @@ bool ParticleEmitterGPUGenerator::Generate(WriteStream& source, BytesContainer&
for (int32 i = 0; i < baseGraph->InitModules.Count(); i++)
{
ProcessModule(baseGraph->InitModules[i]);
ProcessModule(baseGraph->InitModules.Get()[i]);
}
WriteParticleAttributesWrites();
@@ -135,7 +133,7 @@ bool ParticleEmitterGPUGenerator::Generate(WriteStream& source, BytesContainer&
for (int32 i = 0; i < baseGraph->UpdateModules.Count(); i++)
{
ProcessModule(baseGraph->UpdateModules[i]);
ProcessModule(baseGraph->UpdateModules.Get()[i]);
}
// Dead particles removal
@@ -321,22 +319,22 @@ void ParticleEmitterGPUGenerator::clearCache()
// Reset cached boxes values
for (int32 i = 0; i < _graphs.Count(); i++)
{
_graphs[i]->ClearCache();
_graphs.Get()[i]->ClearCache();
}
for (auto& e : _functions)
for (const auto& e : _functions)
{
for (auto& node : e.Value->Nodes)
auto& nodes = ((ParticleEmitterGraphGPU*)e.Value)->Nodes;
for (int32 i = 0; i < nodes.Count(); i++)
{
ParticleEmitterGraphGPUNode& node = nodes.Get()[i];
for (int32 j = 0; j < node.Boxes.Count(); j++)
node.Boxes[j].Cache.Clear();
node.Boxes.Get()[j].Cache.Clear();
}
}
// Reset cached attributes
for (int32 i = 0; i < _attributeValues.Count(); i++)
{
_attributeValues[i] = AttributeCache();
}
_attributeValues.Get()[i] = AttributeCache();
_contextUsesKill = false;
}