summaryrefslogtreecommitdiffstats
path: root/res/raw
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2009-10-07 19:58:03 -0700
committerJason Sams <rjsams@android.com>2009-10-07 19:58:03 -0700
commit267d4fa58ba38160df9fe33d4ea126fe7e5d6230 (patch)
tree55cb1f7afe8c3cbb33e75e67398403b89d2673e3 /res/raw
parent312df73a1fb84a221a1d1e7fe675f93dbd5230ba (diff)
downloadandroid_packages_apps_Trebuchet-267d4fa58ba38160df9fe33d4ea126fe7e5d6230.tar.gz
android_packages_apps_Trebuchet-267d4fa58ba38160df9fe33d4ea126fe7e5d6230.tar.bz2
android_packages_apps_Trebuchet-267d4fa58ba38160df9fe33d4ea126fe7e5d6230.zip
Fix physics bug when the script would go to sleep. The large DT caused the next animation to error. Stop rendering after one frame past last movement.
Diffstat (limited to 'res/raw')
-rw-r--r--res/raw/rollo.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/res/raw/rollo.c b/res/raw/rollo.c
index bae786d46..87fdd2207 100644
--- a/res/raw/rollo.c
+++ b/res/raw/rollo.c
@@ -27,6 +27,16 @@ float g_OldPosPage;
float g_OldPosVelocity;
float g_OldZoom;
+int g_DrawLastFrame;
+int lastFrame(int draw) {
+ // We draw one extra frame to work around the last frame post bug.
+ // We also need to track if we drew the last frame to deal with large DT
+ // in the physics.
+ int ret = g_DrawLastFrame | draw;
+ g_DrawLastFrame = draw;
+ return ret; // should return draw instead.
+}
+
void updateReadback() {
if ((g_OldPosPage != g_PosPage) ||
(g_OldPosVelocity != g_PosVelocity) ||
@@ -309,6 +319,16 @@ main(int launchID)
g_DT = (newTime - g_LastTime) / 1000.f;
g_LastTime = newTime;
+ if (!g_DrawLastFrame) {
+ // If we stopped rendering we cannot use DT.
+ // assume 30fps in this case.
+ g_DT = 0.033f;
+ }
+ if (g_DT > 0.2f) {
+ // physics may break if DT is large.
+ g_DT = 0.2f;
+ }
+
//debugF("zoom", g_Zoom);
if (g_Zoom != state->zoomTarget) {
float dz = (state->zoomTarget - g_Zoom) * g_DT * 5;
@@ -334,7 +354,7 @@ main(int launchID)
if (!g_LastTouchDown) {
g_PosPage = 0;
}
- return 1;//0;
+ return lastFrame(0);
} else if (g_Zoom < 0.85f) {
pfClearColor(0.0f, 0.0f, 0.0f, g_Zoom);
} else {
@@ -356,7 +376,7 @@ main(int launchID)
color(1.0f, 1.0f, 1.0f, 0.99f);
if (iconCount <= 0) {
- return 1;
+ return lastFrame(0);
}
int lastIcon = iconCount-1;
@@ -404,6 +424,6 @@ main(int launchID)
// Bug workaround where the last frame is not always displayed
// So we keep rendering until the bug is fixed.
- return 1;//(g_PosVelocity != 0) || fracf(g_PosPage) || (g_Zoom != state->zoomTarget);
+ return lastFrame((g_PosVelocity != 0) || fracf(g_PosPage) || (g_Zoom != state->zoomTarget));
}