From eed81bda805e05ea7bbd486ab7d198f7ca45d2ed Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Tue, 17 Jan 2012 20:02:30 +1000 Subject: Per-frame Sprites patch three interpolation bools work with the new sprite rendering approach. Giant sprite images that get split into multiple rows now work with the new sprite rendering approach (or even at all). Change-Id: I7f3e09684622f523564802c7634361b6fe363676 Reviewed-by: Alan Alpert --- src/quick/particles/qquickimageparticle.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src/quick/particles') diff --git a/src/quick/particles/qquickimageparticle.cpp b/src/quick/particles/qquickimageparticle.cpp index 9d75c4bb22..b8b05f2330 100644 --- a/src/quick/particles/qquickimageparticle.cpp +++ b/src/quick/particles/qquickimageparticle.cpp @@ -1475,11 +1475,14 @@ void QQuickImageParticle::spritesUpdate(qreal time) // This is particularly important for cut-up sprites. QQuickParticleData* datum = (mainDatum->animationOwner == this ? mainDatum : getShadowDatum(mainDatum)); double frameAt; - qreal progress; + qreal progress = 0; if (datum->frameDuration > 0) { qreal frame = (time - datum->animT)/(datum->frameDuration / 1000.0); frame = qBound((qreal)0.0, frame, (qreal)((qreal)datum->frameCount - 1.0));//Stop at count-1 frames until we have between anim interpolation - progress = modf(frame,&frameAt); + if (m_spritesInterpolate) + progress = modf(frame,&frameAt); + else + modf(frame,&frameAt); } else { datum->frameAt++; if (datum->frameAt >= datum->frameCount){ @@ -1492,7 +1495,6 @@ void QQuickImageParticle::spritesUpdate(qreal time) } } frameAt = datum->frameAt; - progress = 0; } QSizeF sheetSize = getState(m_material)->animSheetSize; qreal y = datum->animY / sheetSize.height(); @@ -1544,7 +1546,7 @@ void QQuickImageParticle::spriteAdvance(int spriteIdx) datum->animIdx = m_spriteEngine->spriteState(spriteIdx); datum->animT = m_spriteEngine->spriteStart(spriteIdx)/1000.0; datum->frameCount = m_spriteEngine->spriteFrames(spriteIdx); - datum->frameDuration = m_spriteEngine->spriteDuration(spriteIdx); + datum->frameDuration = m_spriteEngine->spriteDuration(spriteIdx) / datum->frameCount; datum->animX = m_spriteEngine->spriteX(spriteIdx); datum->animY = m_spriteEngine->spriteY(spriteIdx); datum->animWidth = m_spriteEngine->spriteWidth(spriteIdx); @@ -1586,7 +1588,7 @@ void QQuickImageParticle::initialize(int gIdx, int pIdx) if (m_spriteEngine){ m_spriteEngine->start(spriteIdx); writeTo->frameCount = m_spriteEngine->spriteFrames(spriteIdx); - writeTo->frameDuration = m_spriteEngine->spriteDuration(spriteIdx); + writeTo->frameDuration = m_spriteEngine->spriteDuration(spriteIdx) / writeTo->frameCount; writeTo->animIdx = 0;//Always starts at 0 writeTo->frameAt = -1; writeTo->animX = m_spriteEngine->spriteX(spriteIdx); -- cgit v1.2.3