summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRomain Guy <romainguy@android.com>2009-09-09 13:10:56 -0700
committerRomain Guy <romainguy@android.com>2009-09-09 13:10:56 -0700
commitfa736d79b7d22fe07d9f5ea5491d8aabe9b4d5c4 (patch)
tree9759b6cfadc4378b1d3d615fa9942fdf7722d97f
parent201511cf8a004d386ec9f592041ad3e3d4107184 (diff)
downloadframeworks_base-fa736d79b7d22fe07d9f5ea5491d8aabe9b4d5c4.zip
frameworks_base-fa736d79b7d22fe07d9f5ea5491d8aabe9b4d5c4.tar.gz
frameworks_base-fa736d79b7d22fe07d9f5ea5491d8aabe9b4d5c4.tar.bz2
Remove the FallRS demo, now promoted as a wallpaper.
Change-Id: I0e40f2aa4b51f9e9cdbe14d178491b3667662023
-rw-r--r--libs/rs/java/Fall/Android.mk25
-rw-r--r--libs/rs/java/Fall/AndroidManifest.xml21
-rw-r--r--libs/rs/java/Fall/res/drawable-hdpi/leaves.pngbin154875 -> 0 bytes
-rw-r--r--libs/rs/java/Fall/res/drawable-hdpi/riverbed.jpgbin228373 -> 0 bytes
-rw-r--r--libs/rs/java/Fall/res/drawable-hdpi/sky.jpgbin82354 -> 0 bytes
-rw-r--r--libs/rs/java/Fall/res/raw/fall.c478
-rw-r--r--libs/rs/java/Fall/src/com/android/fall/rs/Fall.java47
-rw-r--r--libs/rs/java/Fall/src/com/android/fall/rs/FallRS.java435
-rw-r--r--libs/rs/java/Fall/src/com/android/fall/rs/FallView.java59
9 files changed, 0 insertions, 1065 deletions
diff --git a/libs/rs/java/Fall/Android.mk b/libs/rs/java/Fall/Android.mk
deleted file mode 100644
index 6366f63..0000000
--- a/libs/rs/java/Fall/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# Copyright (C) 2009 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-#LOCAL_STATIC_JAVA_LIBRARIES := android.renderscript
-
-LOCAL_PACKAGE_NAME := FallRS
-
-include $(BUILD_PACKAGE)
diff --git a/libs/rs/java/Fall/AndroidManifest.xml b/libs/rs/java/Fall/AndroidManifest.xml
deleted file mode 100644
index f646d0d..0000000
--- a/libs/rs/java/Fall/AndroidManifest.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.fall.rs">
-
- <application android:label="FallRS">
-
- <activity
- android:screenOrientation="portrait"
- android:name="Fall"
- android:theme="@android:style/Theme.NoTitleBar">
-
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
-
- </activity>
-
- </application>
-
-</manifest>
diff --git a/libs/rs/java/Fall/res/drawable-hdpi/leaves.png b/libs/rs/java/Fall/res/drawable-hdpi/leaves.png
deleted file mode 100644
index 9eddd66..0000000
--- a/libs/rs/java/Fall/res/drawable-hdpi/leaves.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Fall/res/drawable-hdpi/riverbed.jpg b/libs/rs/java/Fall/res/drawable-hdpi/riverbed.jpg
deleted file mode 100644
index 1698f28..0000000
--- a/libs/rs/java/Fall/res/drawable-hdpi/riverbed.jpg
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Fall/res/drawable-hdpi/sky.jpg b/libs/rs/java/Fall/res/drawable-hdpi/sky.jpg
deleted file mode 100644
index 565a63b..0000000
--- a/libs/rs/java/Fall/res/drawable-hdpi/sky.jpg
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Fall/res/raw/fall.c b/libs/rs/java/Fall/res/raw/fall.c
deleted file mode 100644
index e04e1ff..0000000
--- a/libs/rs/java/Fall/res/raw/fall.c
+++ /dev/null
@@ -1,478 +0,0 @@
-// Copyright (C) 2009 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#pragma version(1)
-#pragma stateVertex(PVSky)
-#pragma stateFragment(PFBackground)
-#pragma stateFragmentStore(PFSBackground)
-
-#define RSID_STATE 0
-#define RSID_RIPPLE_MAP 1
-#define RSID_REFRACTION_MAP 2
-#define RSID_LEAVES 3
-#define RSID_DROP 4
-
-#define LEAF_STRUCT_FIELDS_COUNT 11
-#define LEAF_STRUCT_X 0
-#define LEAF_STRUCT_Y 1
-#define LEAF_STRUCT_SCALE 2
-#define LEAF_STRUCT_ANGLE 3
-#define LEAF_STRUCT_SPIN 4
-#define LEAF_STRUCT_U1 5
-#define LEAF_STRUCT_U2 6
-#define LEAF_STRUCT_ALTITUDE 7
-#define LEAF_STRUCT_RIPPLED 8
-#define LEAF_STRUCT_DELTAX 9
-#define LEAF_STRUCT_DELTAY 10
-
-#define LEAVES_TEXTURES_COUNT 4
-
-#define LEAF_SIZE 0.55f
-
-#define REFRACTION 1.333f
-#define DAMP 3
-
-#define DROP_RADIUS 2
-// The higher, the smaller the ripple
-#define RIPPLE_HEIGHT 10.0f
-
-float g_SkyOffsetX;
-float g_SkyOffsetY;
-
-struct vert_s {
- float nx;
- float ny;
- float nz;
- float s;
- float t;
- float x;
- float y;
- float z;
-};
-
-int offset(int x, int y, int width) {
- return x + 1 + (y + 1) * (width + 2);
-}
-
-void dropWithStrength(int x, int y, int r, int s) {
- int width = State->meshWidth;
- int height = State->meshHeight;
-
- if (x < r) x = r;
- if (y < r) y = r;
- if (x >= width - r) x = width - r - 1;
- if (y >= height - r) y = height - r - 1;
-
- x = width - x;
-
- int rippleMapSize = State->rippleMapSize;
- int index = State->rippleIndex;
- int origin = offset(0, 0, width);
-
- int* current = loadArrayI32(RSID_RIPPLE_MAP, index * rippleMapSize + origin);
- int sqr = r * r;
- float invs = 1.0f / s;
-
- int h = 0;
- for ( ; h < r; h += 1) {
- int sqv = h * h;
- int yn = origin + (y - h) * (width + 2);
- int yp = origin + (y + h) * (width + 2);
- int w = 0;
- for ( ; w < r; w += 1) {
- int squ = w * w;
- if (squ + sqv < sqr) {
- int v = -sqrtf((sqr - (squ + sqv)) << 16) * invs;
- current[yn + x + w] = v;
- current[yp + x + w] = v;
- current[yn + x - w] = v;
- current[yp + x - w] = v;
- }
- }
- }
-}
-
-void drop(int x, int y, int r) {
- dropWithStrength(x, y, r, 1);
-}
-
-void updateRipples() {
- int rippleMapSize = State->rippleMapSize;
- int width = State->meshWidth;
- int height = State->meshHeight;
- int index = State->rippleIndex;
- int origin = offset(0, 0, width);
-
- int* current = loadArrayI32(RSID_RIPPLE_MAP, index * rippleMapSize + origin);
- int* next = loadArrayI32(RSID_RIPPLE_MAP, (1 - index) * rippleMapSize + origin);
-
- storeI32(RSID_STATE, OFFSETOF_WorldState_rippleIndex, 1 - index);
-
- int a = 1;
- int b = width + 2;
- int h = height;
- while (h) {
- int w = width;
- while (w) {
- int droplet = ((current[-b] + current[b] + current[-a] + current[a]) >> 1) - *next;
- droplet -= (droplet >> DAMP);
- *next = droplet;
- current += 1;
- next += 1;
- w -= 1;
- }
- current += 2;
- next += 2;
- h -= 1;
- }
-}
-
-int refraction(int d, int wave, int *map) {
- int i = d;
- if (i < 0) i = -i;
- if (i > 512) i = 512;
- int w = (wave + 0x10000) >> 8;
- w &= ~(w >> 31);
- int r = (map[i] * w) >> 3;
- if (d < 0) {
- return -r;
- }
- return r;
-}
-
-void generateRipples() {
- int rippleMapSize = loadI32(RSID_STATE, OFFSETOF_WorldState_rippleMapSize);
- int width = State->meshWidth;
- int height = State->meshHeight;
- int index = State->rippleIndex;
- int origin = offset(0, 0, width);
-
- int b = width + 2;
-
- int* current = loadArrayI32(RSID_RIPPLE_MAP, index * rippleMapSize + origin);
- int *map = loadArrayI32(RSID_REFRACTION_MAP, 0);
- float *vertices = loadTriangleMeshVerticesF(NAMED_WaterMesh);
- struct vert_s *vert = (struct vert_s *)vertices;
-
- float fw = 1.f / width;
- float fh = 1.f / height;
- float fy = (1.0f / 512.0f) * (1.0f / RIPPLE_HEIGHT);
-
- int h = height - 1;
- while (h >= 0) {
- int w = width - 1;
- int wave = *current;
- int offset = h * width;
- struct vert_s *vtx = vert + offset + w;
-
- while (w >= 0) {
- int nextWave = current[1];
- int dx = nextWave - wave;
- int dy = current[b] - wave;
-
- int offsetx = refraction(dx, wave, map) >> 16;
- int u = (width - w) + offsetx;
- u &= ~(u >> 31);
- if (u >= width) u = width - 1;
-
- int offsety = refraction(dy, wave, map) >> 16;
- int v = (height - h) + offsety;
- v &= ~(v >> 31);
- if (v >= height) v = height - 1;
-
- vtx->s = u * fw;
- vtx->t = v * fh;
- vtx->z = dy * fy;
- vtx --;
-
- w -= 1;
- current += 1;
- wave = nextWave;
- }
- h -= 1;
- current += 2;
- }
-
- // Compute the normals for lighting
- int y = 0;
- for ( ; y < height; y += 1) {
- int x = 0;
- int yOffset = y * width;
- struct vert_s *v = vert;
-
- for ( ; x < width; x += 1) {
- struct vec3_s n1, n2, n3;
- vec3Sub(&n1, (struct vec3_s *)&(v+1)->x, (struct vec3_s *)&v->x);
- vec3Sub(&n2, (struct vec3_s *)&(v+width)->x, (struct vec3_s *)&v->x);
- vec3Cross(&n3, &n1, &n2);
- vec3Norm(&n3);
-
- // Average of previous normal and N1 x N2
- vec3Sub(&n1, (struct vec3_s *)&(v+width+1)->x, (struct vec3_s *)&v->x);
- vec3Cross(&n2, &n1, &n2);
- vec3Add(&n3, &n3, &n2);
- vec3Norm(&n3);
-
- v->nx = n3.x;
- v->ny = n3.y;
- v->nz = -n3.z;
- v += 1;
-
- // reset Z
- //vertices[(yOffset + x) << 3 + 7] = 0.0f;
- }
- }
-}
-
-float averageZ(float x1, float x2, float y1, float y2, float* vertices,
- int meshWidth, int meshHeight, float glWidth, float glHeight) {
-
- x1 = ((x1 + glWidth * 0.5f) / glWidth) * meshWidth;
- x2 = ((x2 + glWidth * 0.5f) / glWidth) * meshWidth;
- y1 = ((y1 + glHeight * 0.5f) / glHeight) * meshHeight;
- y2 = ((y2 + glHeight * 0.5f) / glHeight) * meshHeight;
-
- int quadX1 = clamp(x1, 0, meshWidth);
- int quadX2 = clamp(x2, 0, meshWidth);
- int quadY1 = clamp(y1, 0, meshHeight);
- int quadY2 = clamp(y2, 0, meshHeight);
-
- float z = 0.0f;
- int vertexCount = 0;
-
- int y = quadY1;
- for ( ; y < quadY2; y += 1) {
- int x = quadX1;
- int yOffset = y * meshWidth;
- for ( ; x < quadX2; x += 1) {
- z += vertices[(yOffset + x) << 3 + 7];
- vertexCount += 1;
- }
- }
-
- return 55.0f * z / vertexCount;
-}
-
-void drawLeaf(int index, float* vertices, int meshWidth, int meshHeight,
- float glWidth, float glHeight) {
-
- float *leafStruct = loadArrayF(RSID_LEAVES, index);
-
- float x = leafStruct[LEAF_STRUCT_X];
- float x1 = x - LEAF_SIZE;
- float x2 = x + LEAF_SIZE;
-
- float y = leafStruct[LEAF_STRUCT_Y];
- float y1 = y - LEAF_SIZE;
- float y2 = y + LEAF_SIZE;
-
- float u1 = leafStruct[LEAF_STRUCT_U1];
- float u2 = leafStruct[LEAF_STRUCT_U2];
-
- float z1 = 0.0f;
- float z2 = 0.0f;
- float z3 = 0.0f;
- float z4 = 0.0f;
-
- float a = leafStruct[LEAF_STRUCT_ALTITUDE];
- float s = leafStruct[LEAF_STRUCT_SCALE];
- float r = leafStruct[LEAF_STRUCT_ANGLE];
-
- float tz = 0.0f;
- if (a > 0.0f) {
- tz = -a;
- } else {
-// z1 = averageZ(x1, x, y1, y, vertices, meshWidth, meshHeight, glWidth, glHeight);
-// z2 = averageZ(x, x2, y1, y, vertices, meshWidth, meshHeight, glWidth, glHeight);
-// z3 = averageZ(x, x2, y, y2, vertices, meshWidth, meshHeight, glWidth, glHeight);
-// z4 = averageZ(x1, x, y, y2, vertices, meshWidth, meshHeight, glWidth, glHeight);
- }
-
- x1 -= x;
- x2 -= x;
- y1 -= y;
- y2 -= y;
-
- float matrix[16];
- matrixLoadIdentity(matrix);
- matrixTranslate(matrix, x, y, tz);
- matrixScale(matrix, s, s, 1.0f);
- matrixRotate(matrix, r, 0.0f, 0.0f, 1.0f);
- vpLoadModelMatrix(matrix);
-
- drawQuadTexCoords(x1, y1, z1, u1, 1.0f,
- x2, y1, z2, u2, 1.0f,
- x2, y2, z3, u2, 0.0f,
- x1, y2, z4, u1, 0.0f);
-
- float spin = leafStruct[LEAF_STRUCT_SPIN];
- if (a <= 0.0f) {
- float rippled = leafStruct[LEAF_STRUCT_RIPPLED];
- if (rippled < 0.0f) {
- drop(((x + glWidth * 0.5f) / glWidth) * meshWidth,
- meshHeight - ((y + glHeight * 0.5f) / glHeight) * meshHeight,
- DROP_RADIUS);
- spin /= 4.0f;
- leafStruct[LEAF_STRUCT_SPIN] = spin;
- leafStruct[LEAF_STRUCT_RIPPLED] = 1.0f;
- } else {
-// dropWithStrength(((x + glWidth / 2.0f) / glWidth) * meshWidth,
-// meshHeight - ((y + glHeight / 2.0f) / glHeight) * meshHeight,
-// 2, 5);
- }
- leafStruct[LEAF_STRUCT_X] = x + leafStruct[LEAF_STRUCT_DELTAX];
- leafStruct[LEAF_STRUCT_Y] = y + leafStruct[LEAF_STRUCT_DELTAY];
- r += spin;
- leafStruct[LEAF_STRUCT_ANGLE] = r;
- } else {
- a -= 0.005f;
- leafStruct[LEAF_STRUCT_ALTITUDE] = a;
- r += spin * 2.0f;
- leafStruct[LEAF_STRUCT_ANGLE] = r;
- }
-
- if (-LEAF_SIZE * s + x > glWidth / 2.0f || LEAF_SIZE * s + x < -glWidth / 2.0f ||
- LEAF_SIZE * s + y < -glHeight / 2.0f) {
-
- int sprite = randf(LEAVES_TEXTURES_COUNT);
- leafStruct[LEAF_STRUCT_X] = randf2(-1.0f, 1.0f);
- leafStruct[LEAF_STRUCT_Y] = glHeight / 2.0f + LEAF_SIZE * 2 * randf(1.0f);
- leafStruct[LEAF_STRUCT_SCALE] = randf2(0.4f, 0.5f);
- leafStruct[LEAF_STRUCT_SPIN] = degf(randf2(-0.02f, 0.02f)) / 4.0f;
- leafStruct[LEAF_STRUCT_U1] = sprite / (float) LEAVES_TEXTURES_COUNT;
- leafStruct[LEAF_STRUCT_U2] = (sprite + 1) / (float) LEAVES_TEXTURES_COUNT;
- leafStruct[LEAF_STRUCT_DELTAX] = randf2(-0.02f, 0.02f) / 60.0f;
- leafStruct[LEAF_STRUCT_DELTAY] = -0.08f * randf2(0.9f, 1.1f) / 60.0f;
- }
-}
-
-void drawLeaves() {
- bindProgramFragment(NAMED_PFBackground);
- bindProgramFragmentStore(NAMED_PFSLeaf);
- bindProgramVertex(NAMED_PVSky);
- bindTexture(NAMED_PFBackground, 0, NAMED_TLeaves);
-
- int leavesCount = State->leavesCount;
- int count = leavesCount * LEAF_STRUCT_FIELDS_COUNT;
- int width = State->meshWidth;
- int height = State->meshHeight;
- float glWidth = State->glWidth;
- float glHeight = State->glHeight;
-
- float *vertices = loadTriangleMeshVerticesF(NAMED_WaterMesh);
-
- int i = 0;
- for ( ; i < count; i += LEAF_STRUCT_FIELDS_COUNT) {
- drawLeaf(i, vertices, width, height, glWidth, glHeight);
- }
-
- float matrix[16];
- matrixLoadIdentity(matrix);
- vpLoadModelMatrix(matrix);
-}
-
-void drawRiverbed() {
- bindTexture(NAMED_PFBackground, 0, NAMED_TRiverbed);
-
- drawTriangleMesh(NAMED_WaterMesh);
-}
-
-void drawSky() {
- color(1.0f, 1.0f, 1.0f, 0.8f);
-
- bindProgramFragment(NAMED_PFSky);
- bindProgramFragmentStore(NAMED_PFSLeaf);
- bindTexture(NAMED_PFSky, 0, NAMED_TSky);
-
- float x = g_SkyOffsetX + State->skySpeedX;
- float y = g_SkyOffsetY + State->skySpeedY;
-
- if (x > 1.0f) x = 0.0f;
- if (x < -1.0f) x = 0.0f;
- if (y > 1.0f) y = 0.0f;
-
- g_SkyOffsetX = x;
- g_SkyOffsetY = y;
-
- float matrix[16];
- matrixLoadTranslate(matrix, x, y, 0.0f);
- vpLoadTextureMatrix(matrix);
-
- drawTriangleMesh(NAMED_WaterMesh);
-
- matrixLoadIdentity(matrix);
- vpLoadTextureMatrix(matrix);
-}
-
-void drawLighting() {
- ambient(0.0f, 0.0f, 0.0f, 1.0f);
- diffuse(0.0f, 0.0f, 0.0f, 1.0f);
- specular(0.44f, 0.44f, 0.44f, 1.0f);
- shininess(40.0f);
-
- bindProgramFragmentStore(NAMED_PFSBackground);
- bindProgramFragment(NAMED_PFLighting);
- bindProgramVertex(NAMED_PVLight);
-
- drawTriangleMesh(NAMED_WaterMesh);
-}
-
-void drawNormals() {
- int width = State->meshWidth;
- int height = State->meshHeight;
-
- float *vertices = loadTriangleMeshVerticesF(NAMED_WaterMesh);
-
- bindProgramVertex(NAMED_PVSky);
- bindProgramFragment(NAMED_PFLighting);
-
- color(1.0f, 0.0f, 0.0f, 1.0f);
-
- float scale = 1.0f / 10.0f;
- int y = 0;
- for ( ; y < height; y += 1) {
- int yOffset = y * width;
- int x = 0;
- for ( ; x < width; x += 1) {
- int offset = (yOffset + x) << 3;
- float vx = vertices[offset + 5];
- float vy = vertices[offset + 6];
- float vz = vertices[offset + 7];
- float nx = vertices[offset + 0];
- float ny = vertices[offset + 1];
- float nz = vertices[offset + 2];
- drawLine(vx, vy, vz, vx + nx * scale, vy + ny * scale, vz + nz * scale);
- }
- }
-}
-
-int main(int index) {
- if (Drop->dropX != -1) {
- drop(Drop->dropX, Drop->dropY, DROP_RADIUS);
- Drop->dropX = -1;
- Drop->dropY = -1;
- }
-
- updateRipples();
- generateRipples();
- updateTriangleMesh(NAMED_WaterMesh);
-
- drawRiverbed();
- drawSky();
- drawLighting();
- drawLeaves();
- //drawNormals();
-
- return 1;
-}
diff --git a/libs/rs/java/Fall/src/com/android/fall/rs/Fall.java b/libs/rs/java/Fall/src/com/android/fall/rs/Fall.java
deleted file mode 100644
index b1d9b1d..0000000
--- a/libs/rs/java/Fall/src/com/android/fall/rs/Fall.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.android.fall.rs;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-public class Fall extends Activity {
- private FallView mView;
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- mView = new FallView(this);
- setContentView(mView);
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- mView.onResume();
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- mView.onPause();
-
- Runtime.getRuntime().exit(0);
- }
-}
diff --git a/libs/rs/java/Fall/src/com/android/fall/rs/FallRS.java b/libs/rs/java/Fall/src/com/android/fall/rs/FallRS.java
deleted file mode 100644
index 33aa9ab..0000000
--- a/libs/rs/java/Fall/src/com/android/fall/rs/FallRS.java
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.fall.rs;
-
-import android.content.res.Resources;
-import android.renderscript.RenderScript;
-import android.renderscript.ScriptC;
-import android.renderscript.ProgramFragment;
-import android.renderscript.ProgramStore;
-import android.renderscript.ProgramVertex;
-import android.renderscript.Allocation;
-import android.renderscript.Sampler;
-import android.renderscript.Element;
-import android.renderscript.Light;
-import android.renderscript.Type;
-import static android.renderscript.Sampler.Value.LINEAR;
-import static android.renderscript.Sampler.Value.WRAP;
-import static android.renderscript.ProgramStore.DepthFunc.*;
-import static android.renderscript.ProgramStore.BlendDstFunc;
-import static android.renderscript.ProgramStore.BlendSrcFunc;
-import static android.renderscript.ProgramFragment.EnvMode.*;
-import static android.renderscript.Element.*;
-import android.graphics.BitmapFactory;
-import android.graphics.Bitmap;
-import static android.util.MathUtils.*;
-
-import java.util.TimeZone;
-
-class FallRS {
- private static final int MESH_RESOLUTION = 48;
-
- private static final int RSID_STATE = 0;
-
- private static final int TEXTURES_COUNT = 3;
- private static final int LEAVES_TEXTURES_COUNT = 4;
- private static final int RSID_TEXTURE_RIVERBED = 0;
- private static final int RSID_TEXTURE_LEAVES = 1;
- private static final int RSID_TEXTURE_SKY = 2;
-
- private static final int RSID_RIPPLE_MAP = 1;
-
- private static final int RSID_REFRACTION_MAP = 2;
-
- private static final int RSID_LEAVES = 3;
- private static final int LEAVES_COUNT = 14;
- private static final int LEAF_STRUCT_FIELDS_COUNT = 11;
- private static final int LEAF_STRUCT_X = 0;
- private static final int LEAF_STRUCT_Y = 1;
- private static final int LEAF_STRUCT_SCALE = 2;
- private static final int LEAF_STRUCT_ANGLE = 3;
- private static final int LEAF_STRUCT_SPIN = 4;
- private static final int LEAF_STRUCT_U1 = 5;
- private static final int LEAF_STRUCT_U2 = 6;
- private static final int LEAF_STRUCT_ALTITUDE = 7;
- private static final int LEAF_STRUCT_RIPPLED = 8;
- private static final int LEAF_STRUCT_DELTAX = 9;
- private static final int LEAF_STRUCT_DELTAY = 10;
-
- class Leaf {
- float x;
- float y;
- float scale;
- float angle;
- float spin;
- float u1;
- float u2;
- float altitude;
- float rippled;
- float deltaX;
- float deltaY;
- }
-
- private static final int RSID_DROP = 4;
-
- private Resources mResources;
- private RenderScript mRS;
-
- private final BitmapFactory.Options mOptionsARGB = new BitmapFactory.Options();
-
- private final int mWidth;
- private final int mHeight;
-
- @SuppressWarnings({"FieldCanBeLocal"})
- private ProgramFragment mPfBackground;
- @SuppressWarnings({"FieldCanBeLocal"})
- private ProgramFragment mPfLighting;
- @SuppressWarnings({"FieldCanBeLocal"})
- private ProgramFragment mPfSky;
- @SuppressWarnings({"FieldCanBeLocal"})
- private ProgramStore mPfsBackground;
- @SuppressWarnings({"FieldCanBeLocal"})
- private ProgramStore mPfsLeaf;
- @SuppressWarnings({"FieldCanBeLocal"})
- private ProgramVertex mPvLight;
- @SuppressWarnings({"FieldCanBeLocal"})
- private ProgramVertex mPvSky;
-
- private Allocation mState;
- private Allocation mDropState;
- private DropState mDrop;
- private Type mStateType;
- private Type mDropType;
- private int mMeshWidth;
-
- private int mMeshHeight;
- @SuppressWarnings({"FieldCanBeLocal"})
- private RenderScript.TriangleMesh mMesh;
-
- private Allocation mRippleMap;
- private Allocation mRefractionMap;
-
- private Allocation mLeaves;
- private float mGlHeight;
-
- public FallRS(int width, int height) {
- mWidth = width;
- mHeight = height;
- mOptionsARGB.inScaled = false;
- mOptionsARGB.inPreferredConfig = Bitmap.Config.ARGB_8888;
- }
-
- public void init(RenderScript rs, Resources res) {
- mRS = rs;
- mResources = res;
- initRS();
- }
-
- private void initRS() {
- createProgramVertex();
- createProgramFragmentStore();
- createProgramFragment();
- createMesh();
- createScriptStructures();
- loadTextures();
-
- ScriptC.Builder sb = new ScriptC.Builder(mRS);
- sb.setType(mStateType, "State", RSID_STATE);
- sb.setType(mDropType, "Drop", RSID_DROP);
- sb.setScript(mResources, R.raw.fall);
- sb.setRoot(true);
-
- ScriptC script = sb.create();
- script.setClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- script.setTimeZone(TimeZone.getDefault().getID());
-
- script.bindAllocation(mState, RSID_STATE);
- script.bindAllocation(mRippleMap, RSID_RIPPLE_MAP);
- script.bindAllocation(mRefractionMap, RSID_REFRACTION_MAP);
- script.bindAllocation(mLeaves, RSID_LEAVES);
- script.bindAllocation(mDropState, RSID_DROP);
-
- mRS.contextBindRootScript(script);
- }
-
- private void createMesh() {
- final RenderScript rs = mRS;
- rs.triangleMeshBegin(Element.NORM_ST_XYZ_F32, Element.INDEX_16);
-
- int wResolution;
- int hResolution;
-
- final int width = mWidth;
- final int height = mHeight;
-
- if (width < height) {
- wResolution = MESH_RESOLUTION;
- hResolution = (int) (MESH_RESOLUTION * height / (float) width);
- } else {
- wResolution = (int) (MESH_RESOLUTION * width / (float) height);
- hResolution = MESH_RESOLUTION;
- }
-
- mGlHeight = 2.0f * height / (float) width;
- final float glHeight = mGlHeight;
-
- float quadWidth = 2.0f / (float) wResolution;
- float quadHeight = glHeight / (float) hResolution;
-
- wResolution += 2;
- hResolution += 2;
-
- for (int y = 0; y <= hResolution; y++) {
- final boolean shift = (y & 0x1) == 0;
- final float yOffset = y * quadHeight - glHeight / 2.0f - quadHeight;
- final float t = 1.0f - y / (float) hResolution;
- for (int x = 0; x <= wResolution; x++) {
- if (shift) {
- rs.triangleMeshAddVertex_XYZ_ST_NORM(
- -1.0f + x * quadWidth - quadWidth, yOffset, 0.0f,
- x / (float) wResolution, t,
- 0.0f, 0.0f, -1.0f);
- } else {
- rs.triangleMeshAddVertex_XYZ_ST_NORM(
- -1.0f + x * quadWidth - quadWidth * 0.5f, yOffset, 0.0f,
- x / (float) wResolution, t,
- 0.0f, 0.0f, -1.0f);
- }
- }
- }
-
- for (int y = 0; y < hResolution; y++) {
- final boolean shift = (y & 0x1) == 0;
- final int yOffset = y * (wResolution + 1);
- for (int x = 0; x < wResolution; x++) {
- final int index = yOffset + x;
- final int iWR1 = index + wResolution + 1;
- if (shift) {
- rs.triangleMeshAddTriangle(index, index + 1, iWR1);
- rs.triangleMeshAddTriangle(index + 1, iWR1 + 1, iWR1);
- } else {
- rs.triangleMeshAddTriangle(index, iWR1 + 1, iWR1);
- rs.triangleMeshAddTriangle(index, index + 1, iWR1 + 1);
- }
- }
- }
-
- mMesh = rs.triangleMeshCreate();
- mMesh.setName("WaterMesh");
-
- mMeshWidth = wResolution + 1;
- mMeshHeight = hResolution + 1;
- }
-
- private void createScriptStructures() {
- final int rippleMapSize = (mMeshWidth + 2) * (mMeshHeight + 2);
-
- createState(rippleMapSize);
- createRippleMap(rippleMapSize);
- createRefractionMap();
- createLeaves();
- }
-
- private void createLeaves() {
- final float[] leaves = new float[LEAVES_COUNT * LEAF_STRUCT_FIELDS_COUNT];
- mLeaves = Allocation.createSized(mRS, USER_FLOAT, leaves.length);
- for (int i = 0; i < leaves.length; i += LEAF_STRUCT_FIELDS_COUNT) {
- createLeaf(leaves, i);
- }
- mLeaves.data(leaves);
- }
-
- private void createRefractionMap() {
- final int[] refractionMap = new int[513];
- float ir = 1.0f / 1.333f;
- for (int i = 0; i < refractionMap.length; i++) {
- float d = (float) Math.tan(Math.asin(Math.sin(Math.atan(i * (1.0f / 256.0f))) * ir));
- refractionMap[i] = (int) Math.floor(d * (1 << 16) + 0.5f);
- }
- mRefractionMap = Allocation.createSized(mRS, USER_I32, refractionMap.length);
- mRefractionMap.data(refractionMap);
- }
-
- private void createRippleMap(int rippleMapSize) {
- final int[] rippleMap = new int[rippleMapSize * 2];
- mRippleMap = Allocation.createSized(mRS, USER_I32, rippleMap.length);
- mRippleMap.data(rippleMap);
- }
-
- static class WorldState {
- public int frameCount;
- public int width;
- public int height;
- public int meshWidth;
- public int meshHeight;
- public int rippleMapSize;
- public int rippleIndex;
- public int leavesCount;
- public float glWidth;
- public float glHeight;
- public float skySpeedX;
- public float skySpeedY;
- }
-
- static class DropState {
- public int dropX;
- public int dropY;
- }
-
- private void createState(int rippleMapSize) {
- WorldState worldState = new WorldState();
- worldState.width = mWidth;
- worldState.height = mHeight;
- worldState.meshWidth = mMeshWidth;
- worldState.meshHeight = mMeshHeight;
- worldState.rippleMapSize = rippleMapSize;
- worldState.rippleIndex = 0;
- worldState.leavesCount = LEAVES_COUNT;
- worldState.glWidth = 2.0f;
- worldState.glHeight = mGlHeight;
- worldState.skySpeedX = random(-0.001f, 0.001f);
- worldState.skySpeedY = random(0.00008f, 0.0002f);
-
- mStateType = Type.createFromClass(mRS, WorldState.class, 1, "WorldState");
- mState = Allocation.createTyped(mRS, mStateType);
- mState.data(worldState);
-
- mDrop = new DropState();
- mDrop.dropX = -1;
- mDrop.dropY = -1;
-
- mDropType = Type.createFromClass(mRS, DropState.class, 1, "DropState");
- mDropState = Allocation.createTyped(mRS, mDropType);
- mDropState.data(mDrop);
- }
-
- private void createLeaf(float[] leaves, int index) {
- int sprite = random(LEAVES_TEXTURES_COUNT);
- //noinspection PointlessArithmeticExpression
- leaves[index + LEAF_STRUCT_X] = random(-1.0f, 1.0f);
- leaves[index + LEAF_STRUCT_Y] = random(-mGlHeight / 2.0f, mGlHeight / 2.0f);
- leaves[index + LEAF_STRUCT_SCALE] = random(0.4f, 0.5f);
- leaves[index + LEAF_STRUCT_ANGLE] = random(0.0f, 360.0f);
- leaves[index + LEAF_STRUCT_SPIN] = degrees(random(-0.02f, 0.02f)) / 4.0f;
- leaves[index + LEAF_STRUCT_U1] = sprite / (float) LEAVES_TEXTURES_COUNT;
- leaves[index + LEAF_STRUCT_U2] = (sprite + 1) / (float) LEAVES_TEXTURES_COUNT;
- leaves[index + LEAF_STRUCT_ALTITUDE] = -1.0f;
- leaves[index + LEAF_STRUCT_RIPPLED] = 1.0f;
- leaves[index + LEAF_STRUCT_DELTAX] = random(-0.02f, 0.02f) / 60.0f;
- leaves[index + LEAF_STRUCT_DELTAY] = -0.08f * random(0.9f, 1.1f) / 60.0f;
- }
-
- private void loadTextures() {
- final Allocation[] textures = new Allocation[TEXTURES_COUNT];
- textures[RSID_TEXTURE_RIVERBED] = loadTexture(R.drawable.riverbed, "TRiverbed");
- textures[RSID_TEXTURE_LEAVES] = loadTextureARGB(R.drawable.leaves, "TLeaves");
- textures[RSID_TEXTURE_SKY] = loadTextureARGB(R.drawable.sky, "TSky");
-
- final int count = textures.length;
- for (int i = 0; i < count; i++) {
- final Allocation texture = textures[i];
- texture.uploadToTexture(0);
- }
- }
-
- private Allocation loadTexture(int id, String name) {
- final Allocation allocation = Allocation.createFromBitmapResource(mRS, mResources,
- id, RGB_565, false);
- allocation.setName(name);
- return allocation;
- }
-
- private Allocation loadTextureARGB(int id, String name) {
- Bitmap b = BitmapFactory.decodeResource(mResources, id, mOptionsARGB);
- final Allocation allocation = Allocation.createFromBitmap(mRS, b, RGBA_8888, false);
- allocation.setName(name);
- return allocation;
- }
-
- private void createProgramFragment() {
- Sampler.Builder sampleBuilder = new Sampler.Builder(mRS);
- sampleBuilder.setMin(LINEAR);
- sampleBuilder.setMag(LINEAR);
- sampleBuilder.setWrapS(WRAP);
- sampleBuilder.setWrapT(WRAP);
- Sampler sampler = sampleBuilder.create();
-
- ProgramFragment.Builder builder = new ProgramFragment.Builder(mRS, null, null);
- builder.setTexEnable(true, 0);
- builder.setTexEnvMode(REPLACE, 0);
- mPfBackground = builder.create();
- mPfBackground.setName("PFBackground");
- mPfBackground.bindSampler(sampler, 0);
-
- builder = new ProgramFragment.Builder(mRS, null, null);
- builder.setTexEnable(false, 0);
- mPfLighting = builder.create();
- mPfLighting.setName("PFLighting");
- mPfLighting.bindSampler(sampler, 0);
-
- builder = new ProgramFragment.Builder(mRS, null, null);
- builder.setTexEnable(true, 0);
- builder.setTexEnvMode(MODULATE, 0);
- mPfSky = builder.create();
- mPfSky.setName("PFSky");
- mPfSky.bindSampler(sampler, 0);
- }
-
- private void createProgramFragmentStore() {
- ProgramStore.Builder builder = new ProgramStore.Builder(mRS, null, null);
- builder.setDepthFunc(ALWAYS);
- builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ONE);
- builder.setDitherEnable(false);
- builder.setDepthMask(true);
- mPfsBackground = builder.create();
- mPfsBackground.setName("PFSBackground");
-
- builder = new ProgramStore.Builder(mRS, null, null);
- builder.setDepthFunc(ALWAYS);
- builder.setBlendFunc(BlendSrcFunc.SRC_ALPHA, BlendDstFunc.ONE_MINUS_SRC_ALPHA);
- builder.setDitherEnable(false);
- builder.setDepthMask(true);
- mPfsLeaf = builder.create();
- mPfsLeaf.setName("PFSLeaf");
- }
-
- private void createProgramVertex() {
- ProgramVertex.MatrixAllocation pvOrthoAlloc = new ProgramVertex.MatrixAllocation(mRS);
- pvOrthoAlloc.setupProjectionNormalized(mWidth, mHeight);
-
- Light light = new Light.Builder(mRS).create();
- light.setPosition(0.0f, 2.0f, -8.0f);
-
- ProgramVertex.Builder builder = new ProgramVertex.Builder(mRS, null, null);
- builder.addLight(light);
- mPvLight = builder.create();
- mPvLight.bindAllocation(pvOrthoAlloc);
- mPvLight.setName("PVLight");
-
- builder = new ProgramVertex.Builder(mRS, null, null);
- builder.setTextureMatrixEnable(true);
- mPvSky = builder.create();
- mPvSky.bindAllocation(pvOrthoAlloc);
- mPvSky.setName("PVSky");
- }
-
- void addDrop(float x, float y) {
- mDrop.dropX = (int) ((x / mWidth) * mMeshWidth);
- mDrop.dropY = (int) ((y / mHeight) * mMeshHeight);
- mDropState.data(mDrop);
- }
-}
diff --git a/libs/rs/java/Fall/src/com/android/fall/rs/FallView.java b/libs/rs/java/Fall/src/com/android/fall/rs/FallView.java
deleted file mode 100644
index 7468d2b..0000000
--- a/libs/rs/java/Fall/src/com/android/fall/rs/FallView.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.android.fall.rs;
-
-import android.content.Context;
-import android.view.SurfaceHolder;
-import android.view.MotionEvent;
-import android.view.KeyEvent;
-import android.renderscript.RenderScript;
-import android.renderscript.RSSurfaceView;
-
-class FallView extends RSSurfaceView {
- private FallRS mRender;
-
- public FallView(Context context) {
- super(context);
- setFocusable(true);
- setFocusableInTouchMode(true);
- }
-
- public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
- super.surfaceChanged(holder, format, w, h);
-
- RenderScript RS = createRenderScript(false);
- mRender = new FallRS(w, h);
- mRender.init(RS, getResources());
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- switch (event.getAction()) {
- case MotionEvent.ACTION_DOWN:
- case MotionEvent.ACTION_MOVE:
- mRender.addDrop(event.getX(), event.getY());
- try {
- Thread.sleep(16);
- } catch (InterruptedException e) {
- // Ignore
- }
- break;
- }
- return true;
- }
-}