From 0ac0b3f704bedde5c3a117ac68e7cd4956cd73ef Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Sun, 13 Sep 2009 03:40:04 -0700 Subject: [PATCH] Tweak the galaxy and add better support for preview mode. Change-Id: I3339d8066ec0f20ff12adcd9eedf2186d2ea4b01 --- res/raw/galaxy.rs | 20 ++++++++++----- src/com/android/wallpaper/RenderScriptScene.java | 8 +++++- .../android/wallpaper/RenderScriptWallpaper.java | 2 +- src/com/android/wallpaper/fall/FallView.java | 2 +- src/com/android/wallpaper/galaxy/GalaxyRS.java | 29 ++++++++++++++++------ src/com/android/wallpaper/galaxy/GalaxyView.java | 2 +- src/com/android/wallpaper/grass/GrassView.java | 2 +- 7 files changed, 46 insertions(+), 19 deletions(-) diff --git a/res/raw/galaxy.rs b/res/raw/galaxy.rs index 2b081e2..6fd4470 100644 --- a/res/raw/galaxy.rs +++ b/res/raw/galaxy.rs @@ -23,8 +23,8 @@ float angle; float distance; void init() { - angle = 0.0f; - distance = 0.0f; + angle = 37.0f; + distance = 0.55f; } void drawSpace(float xOffset, int width, int height) { @@ -61,7 +61,7 @@ void drawParticles(float xOffset, int width, int height) { float matrix[16]; matrixLoadTranslate(matrix, 0.0f, 0.0f, 10.0f - 6.0f * distance); - matrixScale(matrix, 6.15f, 6.0f, 1.0f); + matrixScale(matrix, 6.6f, 6.0f, 1.0f); matrixRotate(matrix, angle, 1.0f, 0.5f, 0.0f); vpLoadModelMatrix(matrix); @@ -103,9 +103,17 @@ int main(int index) { drawParticles(x, width, height); drawLights(x, width, height); - if (angle < 68.0f) { - angle += 0.4f; - distance = angle / 68.0f; + if (State->isPreview == 0) { + if (angle > 0.0f) { + angle -= 0.4f; + distance = angle / 68.0f; + } + } else { + // Unfortunately this cannot happen in init() + // since the State structure instance does not + // exist at this point + angle = 0.0f; + distance = 0.0f; } return 1; diff --git a/src/com/android/wallpaper/RenderScriptScene.java b/src/com/android/wallpaper/RenderScriptScene.java index 01c551c..0272651 100644 --- a/src/com/android/wallpaper/RenderScriptScene.java +++ b/src/com/android/wallpaper/RenderScriptScene.java @@ -24,6 +24,7 @@ import android.renderscript.ScriptC; public abstract class RenderScriptScene { protected int mWidth; protected int mHeight; + protected boolean mPreview; protected Resources mResources; protected RenderScript mRS; protected ScriptC mScript; @@ -33,11 +34,16 @@ public abstract class RenderScriptScene { mHeight = height; } - public void init(RenderScript rs, Resources res) { + public void init(RenderScript rs, Resources res, boolean isPreview) { mRS = rs; mResources = res; + mPreview = isPreview; mScript = createScript(); } + + public boolean isPreview() { + return mPreview; + } public int getWidth() { return mWidth; diff --git a/src/com/android/wallpaper/RenderScriptWallpaper.java b/src/com/android/wallpaper/RenderScriptWallpaper.java index f40bf41..1102b0f 100644 --- a/src/com/android/wallpaper/RenderScriptWallpaper.java +++ b/src/com/android/wallpaper/RenderScriptWallpaper.java @@ -72,7 +72,7 @@ public abstract class RenderScriptWallpaper extends super.onSurfaceChanged(holder, format, width, height); if (mRenderer == null) { mRenderer = createScene(width, height); - mRenderer.init(mRs, getResources()); + mRenderer.init(mRs, getResources(), isPreview()); mRenderer.start(); } else { mRenderer.resize(width, height); diff --git a/src/com/android/wallpaper/fall/FallView.java b/src/com/android/wallpaper/fall/FallView.java index 2e4c0d2..871ca16 100644 --- a/src/com/android/wallpaper/fall/FallView.java +++ b/src/com/android/wallpaper/fall/FallView.java @@ -37,7 +37,7 @@ class FallView extends RSSurfaceView { RenderScript RS = createRenderScript(false); mRender = new FallRS(w, h); - mRender.init(RS, getResources()); + mRender.init(RS, getResources(), false); mRender.start(); } diff --git a/src/com/android/wallpaper/galaxy/GalaxyRS.java b/src/com/android/wallpaper/galaxy/GalaxyRS.java index 6a964f4..0233b74 100644 --- a/src/com/android/wallpaper/galaxy/GalaxyRS.java +++ b/src/com/android/wallpaper/galaxy/GalaxyRS.java @@ -173,6 +173,7 @@ class GalaxyRS extends RenderScriptScene { public int particlesCount; public int galaxyRadius; public float xOffset; + public int isPreview; } static class GalaxyParticle { @@ -184,11 +185,17 @@ class GalaxyRS extends RenderScriptScene { } private void createState() { + boolean isPreview = isPreview(); + mGalaxyState = new GalaxyState(); mGalaxyState.width = mWidth; mGalaxyState.height = mHeight; mGalaxyState.particlesCount = PARTICLES_COUNT; mGalaxyState.galaxyRadius = GALAXY_RADIUS; + mGalaxyState.isPreview = isPreview ? 1 : 0; + if (isPreview) { + mGalaxyState.xOffset = 0.5f; + } mStateType = Type.createFromClass(mRS, GalaxyState.class, 1, "GalaxyState"); mState = Allocation.createTyped(mRS, mStateType); @@ -209,23 +216,29 @@ class GalaxyRS extends RenderScriptScene { @SuppressWarnings({"PointlessArithmeticExpression"}) private void createParticle(GalaxyParticle gp, int index, float scale) { - float d = abs(randomGauss()) * GALAXY_RADIUS / 2.0f + random(-4.0f, 4.0f); - float z = randomGauss() * 0.5f * 0.8f * ((GALAXY_RADIUS - d) / (float) GALAXY_RADIUS); + float d = abs(randomGauss()) * GALAXY_RADIUS * 0.5f + random(64.0f); + float id = d / (float) GALAXY_RADIUS; + float z = randomGauss() * 0.4f * (1.0f - id); float p = -d * ELLIPSE_TWIST; - final float nd = d / (float) GALAXY_RADIUS; - int red, green, blue, alpha; - if (d < GALAXY_RADIUS / 3.0f) { - red = (int) (220 + nd * 35); + if (d < GALAXY_RADIUS * 0.33f) { + red = (int) (220 + id * 35); green = 220; blue = 220; } else { red = 180; green = 180; - blue = (int) constrain(140 + nd * 115, 140, 255); + blue = (int) constrain(140 + id * 115, 140, 255); } - alpha = (int) (40 + nd * 215); + + if (d > GALAXY_RADIUS * 0.15f) { + z *= 0.6f * (1.0f - id); + } else { + z *= 0.72f; + } + + alpha = (int) (140 + (1.0f - id) * 115); int color = red | green << 8 | blue << 16 | alpha << 24; // Map to the projection coordinates (viewport.x = -1.0 -> 1.0) diff --git a/src/com/android/wallpaper/galaxy/GalaxyView.java b/src/com/android/wallpaper/galaxy/GalaxyView.java index 11c46ee..e065fc7 100644 --- a/src/com/android/wallpaper/galaxy/GalaxyView.java +++ b/src/com/android/wallpaper/galaxy/GalaxyView.java @@ -35,7 +35,7 @@ class GalaxyView extends RSSurfaceView { RenderScript RS = createRenderScript(false); GalaxyRS render = new GalaxyRS(w, h); - render.init(RS, getResources()); + render.init(RS, getResources(), false); render.setOffset(0.5f, 0.0f, 0, 0); render.start(); } diff --git a/src/com/android/wallpaper/grass/GrassView.java b/src/com/android/wallpaper/grass/GrassView.java index b8c2d8a..3c1b167 100644 --- a/src/com/android/wallpaper/grass/GrassView.java +++ b/src/com/android/wallpaper/grass/GrassView.java @@ -35,7 +35,7 @@ class GrassView extends RSSurfaceView { RenderScript RS = createRenderScript(false); GrassRS render = new GrassRS(w, h); - render.init(RS, getResources()); + render.init(RS, getResources(), false); render.setOffset(0.5f, 0.0f, 0, 0); render.start(); } -- 2.11.0