Skip to content

Commit 9e37740

Browse files
committed
Add optional particle effect lifetimes in real delta time mode
Eliminated ineffective `_mm_prefetch` usage
1 parent 8bf9160 commit 9e37740

File tree

1 file changed

+10
-28
lines changed

1 file changed

+10
-28
lines changed

src/Layers/xrRender/ParticleEffect.cpp

Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -215,36 +215,22 @@ void CParticleEffect::OnFrame(u32 frame_dt)
215215
vis.box.getsphere(vis.sphere.P, vis.sphere.R);
216216
}
217217

218-
219-
m_MemDT += frame_dt;
220-
int StepCount = 0;
221-
if (m_MemDT >= uDT_STEP)
222-
{
223-
StepCount = m_MemDT / uDT_STEP;
224-
m_MemDT = m_MemDT % uDT_STEP;
225-
clamp(StepCount, 0, 3);
226-
}
227-
for (; StepCount; StepCount--)
218+
bool deffered_stop = true;
219+
if (m_Def->m_Flags.is(CPEDef::dfTimeLimit))
228220
{
229-
if (m_Def->m_Flags.is(CPEDef::dfTimeLimit))
221+
if (!m_RT_Flags.is(flRT_DefferedStop))
230222
{
231-
if (!m_RT_Flags.is(flRT_DefferedStop))
223+
m_fElapsedLimit -= Device.fTimeDelta;
224+
if (m_fElapsedLimit < 0.f)
232225
{
233-
m_fElapsedLimit -= fDT_STEP;
234-
if (m_fElapsedLimit < 0.f)
235-
{
236-
m_fElapsedLimit = m_Def->m_fTimeLimit;
237-
Stop(true);
238-
break;
239-
}
226+
m_fElapsedLimit = m_Def->m_fTimeLimit;
227+
Stop(true);
228+
deffered_stop = false;
240229
}
241230
}
242-
if (m_RT_Flags.is(flRT_DefferedStop) && (0 == p_cnt))
243-
{
244-
m_RT_Flags.set(flRT_Playing | flRT_DefferedStop, FALSE);
245-
break;
246-
}
247231
}
232+
if (deffered_stop && m_RT_Flags.is(flRT_DefferedStop) && (0 == p_cnt))
233+
m_RT_Flags.set(flRT_Playing | flRT_DefferedStop, FALSE);
248234
}
249235
else
250236
{
@@ -470,8 +456,6 @@ void CParticleEffect::Render(float) {
470456
lt.set (0.f,0.f);
471457
rb.set (1.f,1.f);
472458

473-
_mm_prefetch( (char*) &particles[i + 1] , _MM_HINT_NTA );
474-
475459
float sina = 0.0f , cosa = 0.0f;
476460

477461
sina = _sin(m.rot.x);
@@ -480,8 +464,6 @@ void CParticleEffect::Render(float) {
480464
//_mm_store_ss(&sina, _mm_sin_ps(_mm_set1_ps(m.rot.x)));
481465
//_mm_store_ss(&cosa, _mm_cos_ps(_mm_set1_ps(m.rot.x)));
482466

483-
_mm_prefetch( 64 + (char*) &particles[i + 1] , _MM_HINT_NTA );
484-
485467
if (m_Def->m_Flags.is(CPEDef::dfFramed))
486468
m_Def->m_Frame.CalculateTC(iFloor(float(m.frame)/255.f),lt,rb);
487469

0 commit comments

Comments
 (0)