diff options
author | Alan Alpert <alan.alpert@nokia.com> | 2012-01-17 20:02:30 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-23 07:38:34 +0100 |
commit | eed81bda805e05ea7bbd486ab7d198f7ca45d2ed (patch) | |
tree | 67805283499d5f1e5597129e8797a2785af32ceb /src/quick/particles | |
parent | 658728c1397e1523d8293956815325f2269e4ffb (diff) |
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 <alan.alpert@nokia.com>
Diffstat (limited to 'src/quick/particles')
-rw-r--r-- | src/quick/particles/qquickimageparticle.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
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<ImageMaterialData>(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); |