From 8d57c78704797dff5df2df2b10a08dec885fe489 Mon Sep 17 00:00:00 2001 From: Marco Nelissen Date: Wed, 19 Jan 2011 09:19:39 -0800 Subject: Fix horizontal and vertical panning. Change-Id: I5177f3f3424233371136bdcbf358ce7056ea055d --- res/raw/pv4tex.glslv | 14 +++++++------- res/raw/pv5tex.glslv | 16 ++++++++-------- src/com/android/magicsmoke/MagicSmokeRS.java | 5 ++++- src/com/android/magicsmoke/RenderScriptScene.java | 2 +- src/com/android/magicsmoke/RenderScriptWallpaper.java | 2 +- src/com/android/magicsmoke/clouds.rs | 15 ++++++++++----- 6 files changed, 31 insertions(+), 23 deletions(-) diff --git a/res/raw/pv4tex.glslv b/res/raw/pv4tex.glslv index 9fd1f04..5634efe 100644 --- a/res/raw/pv4tex.glslv +++ b/res/raw/pv4tex.glslv @@ -3,18 +3,18 @@ varying vec2 varTex1; varying vec2 varTex2; varying vec2 varTex3; -vec2 mul(vec4 uni, vec2 attr, float idx) +vec2 mul(vec4 uni, vec2 attr, float idx, vec2 offset) { float invz = 0.35 + idx*0.05; return vec2( - 0.5 + 0.5 * invz * (uni.z * ( uni.y * attr.x + uni.x * attr.y)) + uni.w, - 0.5 + 0.5 * invz * (uni.z * (-uni.x * attr.x + uni.y * attr.y))); + 0.5 + 0.5 * invz * (uni.z * ( uni.y * (attr.x + offset.x) + uni.x * (attr.y + offset.y))) + uni.w, + 0.5 + 0.5 * invz * (uni.z * (-uni.x * (attr.x + offset.x) + uni.y * (attr.y + offset.y)))); } void main() { - varTex0 = mul(UNI_layer0, ATTRIB_position.xy, 1.0); - varTex1 = mul(UNI_layer1, ATTRIB_position.xy, 2.0); - varTex2 = mul(UNI_layer2, ATTRIB_position.xy, 3.0); - varTex3 = mul(UNI_layer3, ATTRIB_position.xy, 4.0); + varTex0 = mul(UNI_layer0, ATTRIB_position.xy, 1.0, UNI_panoffset); + varTex1 = mul(UNI_layer1, ATTRIB_position.xy, 2.0, UNI_panoffset); + varTex2 = mul(UNI_layer2, ATTRIB_position.xy, 3.0, UNI_panoffset); + varTex3 = mul(UNI_layer3, ATTRIB_position.xy, 4.0, UNI_panoffset); gl_Position = ATTRIB_position; } diff --git a/res/raw/pv5tex.glslv b/res/raw/pv5tex.glslv index 998f209..bb190e8 100644 --- a/res/raw/pv5tex.glslv +++ b/res/raw/pv5tex.glslv @@ -4,19 +4,19 @@ varying vec2 varTex2; varying vec2 varTex3; varying vec2 varTex4; -vec2 mul(vec4 uni, vec2 attr, float idx) +vec2 mul(vec4 uni, vec2 attr, float idx, vec2 offset) { float invz = 0.5 + idx*0.05; return vec2( - 0.5 + 0.5 * invz * (uni.z * ( uni.y * attr.x + uni.x * attr.y)) + uni.w, - 0.5 + 0.5 * invz * (uni.z * (-uni.x * attr.x + uni.y * attr.y))); + 0.5 + 0.5 * invz * (uni.z * ( uni.y * (attr.x + offset.x) + uni.x * (attr.y + offset.y))) + uni.w, + 0.5 + 0.5 * invz * (uni.z * (-uni.x * (attr.x + offset.x) + uni.y * (attr.y + offset.y)))); } void main() { - varTex0 = mul(UNI_layer0, ATTRIB_position.xy, 1.0); - varTex1 = mul(UNI_layer1, ATTRIB_position.xy, 2.0); - varTex2 = mul(UNI_layer2, ATTRIB_position.xy, 3.0); - varTex3 = mul(UNI_layer3, ATTRIB_position.xy, 4.0); - varTex4 = mul(UNI_layer4, ATTRIB_position.xy, 5.0); + varTex0 = mul(UNI_layer0, ATTRIB_position.xy, 1.0, UNI_panoffset); + varTex1 = mul(UNI_layer1, ATTRIB_position.xy, 2.0, UNI_panoffset); + varTex2 = mul(UNI_layer2, ATTRIB_position.xy, 3.0, UNI_panoffset); + varTex3 = mul(UNI_layer3, ATTRIB_position.xy, 4.0, UNI_panoffset); + varTex4 = mul(UNI_layer4, ATTRIB_position.xy, 5.0, UNI_panoffset); gl_Position = ATTRIB_position; } diff --git a/src/com/android/magicsmoke/MagicSmokeRS.java b/src/com/android/magicsmoke/MagicSmokeRS.java index 6b0e8ff..201aacd 100644 --- a/src/com/android/magicsmoke/MagicSmokeRS.java +++ b/src/com/android/magicsmoke/MagicSmokeRS.java @@ -44,6 +44,7 @@ class MagicSmokeRS extends RenderScriptScene implements OnSharedPreferenceChange static class WorldState { public float mXOffset; + public float mYOffset; public int mPreset; public int mTextureMask; public int mRotate; @@ -226,10 +227,12 @@ class MagicSmokeRS extends RenderScriptScene implements OnSharedPreferenceChange }*/ @Override - public void setOffset(float xOffset, float yOffset, int xPixels, int yPixels) { + public void setOffset(float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels) { // update our state, then push it to the renderscript mWorldState.mXOffset = xOffset; + mWorldState.mYOffset = yOffset; mScript.set_gXOffset(mWorldState.mXOffset); + mScript.set_gYOffset(mWorldState.mYOffset); } @Override diff --git a/src/com/android/magicsmoke/RenderScriptScene.java b/src/com/android/magicsmoke/RenderScriptScene.java index 9f3859e..fdf4935 100644 --- a/src/com/android/magicsmoke/RenderScriptScene.java +++ b/src/com/android/magicsmoke/RenderScriptScene.java @@ -83,7 +83,7 @@ public abstract class RenderScriptScene { } @SuppressWarnings({"UnusedDeclaration"}) - public void setOffset(float xOffset, float yOffset, int xPixels, int yPixels) { + public void setOffset(float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels) { } @SuppressWarnings({"UnusedDeclaration"}) diff --git a/src/com/android/magicsmoke/RenderScriptWallpaper.java b/src/com/android/magicsmoke/RenderScriptWallpaper.java index 28c68af..c9bbdd9 100644 --- a/src/com/android/magicsmoke/RenderScriptWallpaper.java +++ b/src/com/android/magicsmoke/RenderScriptWallpaper.java @@ -93,7 +93,7 @@ public abstract class RenderScriptWallpaper extends @Override public void onOffsetsChanged(float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels) { - mRenderer.setOffset(xOffset, yOffset, xPixels, yPixels); + mRenderer.setOffset(xOffset, yOffset, xStep, yStep, xPixels, yPixels); } @Override diff --git a/src/com/android/magicsmoke/clouds.rs b/src/com/android/magicsmoke/clouds.rs index cc81e57..b0d55bf 100644 --- a/src/com/android/magicsmoke/clouds.rs +++ b/src/com/android/magicsmoke/clouds.rs @@ -31,6 +31,7 @@ // State set from java float gXOffset; +float gYOffset; int gPreset; int gTextureMask; int gRotate; @@ -48,6 +49,7 @@ typedef struct VertexShaderConstants_s { float4 layer2; float4 layer3; float4 layer4; + float2 panoffset; } VertexShaderConstants; VertexShaderConstants *gVSConstants; @@ -136,11 +138,11 @@ static void update() rotate(gVSConstants->layer3, rotation[3]); rotate(gVSConstants->layer4, rotation[4]); - gVSConstants->layer0.w = -gXOffset * 0 + xshift[0]; - gVSConstants->layer1.w = -gXOffset * 8 + xshift[1]; - gVSConstants->layer2.w = -gXOffset * 16 + xshift[2]; - gVSConstants->layer3.w = -gXOffset * 24 + xshift[3]; - gVSConstants->layer4.w = -gXOffset * 32 + xshift[4]; + gVSConstants->layer0.w = xshift[0]; + gVSConstants->layer1.w = xshift[1]; + gVSConstants->layer2.w = xshift[2]; + gVSConstants->layer3.w = xshift[3]; + gVSConstants->layer4.w = xshift[4]; float m = 0.35f; gVSConstants->layer0.z = m * scale[0]; @@ -149,6 +151,9 @@ static void update() gVSConstants->layer3.z = m * scale[3]; gVSConstants->layer4.z = m * scale[4]; + gVSConstants->panoffset.x = gXOffset; + gVSConstants->panoffset.y = -gYOffset; + gFSConstants->clearColor = clearColor; int pos = 0; -- cgit v1.2.3