Changed particle callbacks arguments (offset, count) => (startId, endId)
Former-commit-id: 24550dad44e55aa9dfabaf916cbfb8e25df0451a
This commit is contained in:
parent
e9267d7f43
commit
202f675301
|
|
@ -25,7 +25,7 @@ class NAZARA_API NzParticleController : public NzResource
|
||||||
NzParticleController(const NzParticleController& controller);
|
NzParticleController(const NzParticleController& controller);
|
||||||
virtual ~NzParticleController();
|
virtual ~NzParticleController();
|
||||||
|
|
||||||
virtual void Apply(NzParticleEmitter& emitter, NzParticleMapper& mapper, unsigned int offset, unsigned int particleCount, float elapsedTime) = 0;
|
virtual void Apply(NzParticleEmitter& emitter, NzParticleMapper& mapper, unsigned int startId, unsigned int endId, float elapsedTime) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NAZARA_PARTICLECONTROLLER_HPP
|
#endif // NAZARA_PARTICLECONTROLLER_HPP
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ class NAZARA_API NzParticleGenerator : public NzResource
|
||||||
NzParticleGenerator(const NzParticleGenerator& generator);
|
NzParticleGenerator(const NzParticleGenerator& generator);
|
||||||
virtual ~NzParticleGenerator();
|
virtual ~NzParticleGenerator();
|
||||||
|
|
||||||
virtual void Generate(NzParticleEmitter& emitter, NzParticleMapper& mapper, unsigned int offset, unsigned int particleCount) = 0;
|
virtual void Generate(NzParticleEmitter& emitter, NzParticleMapper& mapper, unsigned int startId, unsigned int endId) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NAZARA_PARTICLEGENERATOR_HPP
|
#endif // NAZARA_PARTICLEGENERATOR_HPP
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ class NAZARA_API NzParticleRenderer : public NzResource
|
||||||
NzParticleRenderer(const NzParticleRenderer& renderer);
|
NzParticleRenderer(const NzParticleRenderer& renderer);
|
||||||
virtual ~NzParticleRenderer();
|
virtual ~NzParticleRenderer();
|
||||||
|
|
||||||
virtual void Render(const NzParticleEmitter& emitter, const NzParticleMapper& mapper, unsigned int offset, unsigned int particleCount, NzAbstractRenderQueue* renderQueue) = 0;
|
virtual void Render(const NzParticleEmitter& emitter, const NzParticleMapper& mapper, unsigned int startId, unsigned int endId, NzAbstractRenderQueue* renderQueue) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NAZARA_PARTICLERENDERER_HPP
|
#endif // NAZARA_PARTICLERENDERER_HPP
|
||||||
|
|
|
||||||
|
|
@ -72,9 +72,11 @@ void NzParticleEmitter::AddGenerator(NzParticleGenerator* generator)
|
||||||
void NzParticleEmitter::AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const
|
void NzParticleEmitter::AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const
|
||||||
{
|
{
|
||||||
///FIXME: Vérifier le renderer
|
///FIXME: Vérifier le renderer
|
||||||
NzParticleMapper mapper(m_buffer.data(), m_declaration);
|
if (m_particleCount > 0)
|
||||||
|
{
|
||||||
m_renderer->Render(*this, mapper, 0, m_particleCount, renderQueue);
|
NzParticleMapper mapper(m_buffer.data(), m_declaration);
|
||||||
|
m_renderer->Render(*this, mapper, 0, m_particleCount-1, renderQueue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void* NzParticleEmitter::CreateParticle()
|
void* NzParticleEmitter::CreateParticle()
|
||||||
|
|
@ -106,7 +108,7 @@ void* NzParticleEmitter::GenerateParticles(unsigned int count)
|
||||||
|
|
||||||
NzParticleMapper mapper(ptr, m_declaration);
|
NzParticleMapper mapper(ptr, m_declaration);
|
||||||
for (NzParticleGenerator* generator : m_generators)
|
for (NzParticleGenerator* generator : m_generators)
|
||||||
generator->Generate(*this, mapper, 0, m_particleCount);
|
generator->Generate(*this, mapper, 0, m_particleCount-1);
|
||||||
|
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
@ -329,33 +331,36 @@ void NzParticleEmitter::Update()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NzParticleMapper mapper(m_buffer.data(), m_declaration);
|
if (m_particleCount > 0)
|
||||||
|
|
||||||
m_processing = true;
|
|
||||||
|
|
||||||
// Pour éviter un verrouillage en cas d'exception
|
|
||||||
NzCallOnExit onExit([this]()
|
|
||||||
{
|
{
|
||||||
|
NzParticleMapper mapper(m_buffer.data(), m_declaration);
|
||||||
|
|
||||||
|
m_processing = true;
|
||||||
|
|
||||||
|
// Pour éviter un verrouillage en cas d'exception
|
||||||
|
NzCallOnExit onExit([this]()
|
||||||
|
{
|
||||||
|
m_processing = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
for (NzParticleController* controller : m_controllers)
|
||||||
|
controller->Apply(*this, mapper, 0, m_particleCount-1, elapsedTime);
|
||||||
|
|
||||||
m_processing = false;
|
m_processing = false;
|
||||||
});
|
onExit.Reset();
|
||||||
|
|
||||||
for (NzParticleController* controller : m_controllers)
|
// On tue maintenant les particules mortes durant la mise à jour
|
||||||
controller->Apply(*this, mapper, 0, m_particleCount, elapsedTime);
|
if (m_dyingParticles.size() < m_particleCount)
|
||||||
|
{
|
||||||
|
// On tue les particules depuis la dernière vers la première (en terme de place), le std::set étant trié via std::greater
|
||||||
|
// La raison est simple, étant donné que la mort d'une particule signifie le déplacement de la dernière particule du buffer,
|
||||||
|
// sans cette solution certaines particules pourraient échapper à la mort
|
||||||
|
for (unsigned int index : m_dyingParticles)
|
||||||
|
KillParticle(index);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
KillParticles(); // Toutes les particules sont mortes, ceci est beaucoup plus rapide
|
||||||
|
|
||||||
m_processing = false;
|
m_dyingParticles.clear();
|
||||||
onExit.Reset();
|
|
||||||
|
|
||||||
// On tue maintenant les particules mortes durant la mise à jour
|
|
||||||
if (m_dyingParticles.size() < m_particleCount)
|
|
||||||
{
|
|
||||||
// On tue les particules depuis la dernière vers la première (en terme de place), le std::set étant trié via std::greater
|
|
||||||
// La raison est simple, étant donné que la mort d'une particule signifie le déplacement de la dernière particule du buffer,
|
|
||||||
// sans cette solution certaines particules pourraient échapper à la mort
|
|
||||||
for (unsigned int index : m_dyingParticles)
|
|
||||||
KillParticle(index);
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
KillParticles(); // Toutes les particules sont mortes, ceci est beaucoup plus rapide
|
|
||||||
|
|
||||||
m_dyingParticles.clear();
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue