aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/particles
diff options
context:
space:
mode:
authorAlan Alpert <alan.alpert@nokia.com>2012-01-17 20:02:30 +1000
committerQt by Nokia <qt-info@nokia.com>2012-01-23 07:38:34 +0100
commiteed81bda805e05ea7bbd486ab7d198f7ca45d2ed (patch)
tree67805283499d5f1e5597129e8797a2785af32ceb /src/quick/particles
parent658728c1397e1523d8293956815325f2269e4ffb (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.cpp12
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);