From a7a211b8a68a7d3f5ff4409aa286db07f96c0550 Mon Sep 17 00:00:00 2001 From: Alex Sakhartchouk Date: Thu, 8 Dec 2011 11:39:14 -0800 Subject: [PATCH] Sample scene graph Change-Id: I65b210b770121ac02c5857b48d2ec0d053133dd6 --- tests/RenderScriptTests/SceneGraph/Android.mk | 26 + .../SceneGraph/AndroidManifest.xml | 22 + .../SceneGraph/res/drawable-nodpi/checker.png | Bin 0 -> 8422 bytes .../res/drawable-nodpi/defaultcube.png | Bin 0 -> 2791 bytes .../SceneGraph/res/drawable-nodpi/robot.png | Bin 0 -> 292580 bytes .../SceneGraph/res/menu/loader_menu.xml | 25 + .../SceneGraph/res/raw/blur_h.glsl | 15 + .../SceneGraph/res/raw/blur_v.glsl | 17 + .../SceneGraph/res/raw/blur_vertex.glsl | 7 + .../SceneGraph/res/raw/diffuse.glsl | 19 + .../SceneGraph/res/raw/metal.glsl | 23 + .../SceneGraph/res/raw/paintf.glsl | 26 + .../SceneGraph/res/raw/plastic.glsl | 22 + .../SceneGraph/res/raw/robot.a3d | Bin 0 -> 144528 bytes .../SceneGraph/res/raw/select_color.glsl | 13 + .../SceneGraph/res/raw/shader2v.glsl | 17 + .../SceneGraph/res/raw/texture.glsl | 7 + .../SceneGraph/res/values/strings.xml | 24 + .../src/com/android/scenegraph/Camera.java | 81 +++ .../com/android/scenegraph/ColladaParser.java | 528 +++++++++++++++ .../com/android/scenegraph/ColladaScene.java | 145 ++++ .../android/scenegraph/CompoundTransform.java | 118 ++++ .../src/com/android/scenegraph/Drawable.java | 178 +++++ .../com/android/scenegraph/DrawableBase.java | 39 ++ .../com/android/scenegraph/DrawableGroup.java | 47 ++ .../com/android/scenegraph/FileSelector.java | 110 +++ .../com/android/scenegraph/Float4Param.java | 70 ++ .../src/com/android/scenegraph/LightBase.java | 57 ++ .../android/scenegraph/MatrixTransform.java | 60 ++ .../com/android/scenegraph/PointLight.java | 39 ++ .../com/android/scenegraph/RenderPass.java | 116 ++++ .../com/android/scenegraph/RenderState.java | 93 +++ .../src/com/android/scenegraph/Scene.java | 260 ++++++++ .../com/android/scenegraph/SceneGraph.java | 115 ++++ .../android/scenegraph/SceneGraphBase.java | 74 +++ .../com/android/scenegraph/SceneGraphRS.java | 629 ++++++++++++++++++ .../android/scenegraph/SceneGraphView.java | 152 +++++ .../com/android/scenegraph/SceneManager.java | 127 ++++ .../com/android/scenegraph/ShaderParam.java | 47 ++ .../src/com/android/scenegraph/Texture2D.java | 89 +++ .../com/android/scenegraph/TextureParam.java | 54 ++ .../com/android/scenegraph/TouchHandler.java | 122 ++++ .../src/com/android/scenegraph/Transform.java | 88 +++ .../android/scenegraph/TransformParam.java | 57 ++ .../src/com/android/scenegraph/camera.rs | 44 ++ .../src/com/android/scenegraph/export.rs | 28 + .../src/com/android/scenegraph/render.rs | 296 +++++++++ .../src/com/android/scenegraph/scenegraph.rs | 90 +++ .../src/com/android/scenegraph/transform.rs | 111 ++++ .../com/android/scenegraph/transform_def.rsh | 179 +++++ 50 files changed, 4506 insertions(+) create mode 100644 tests/RenderScriptTests/SceneGraph/Android.mk create mode 100644 tests/RenderScriptTests/SceneGraph/AndroidManifest.xml create mode 100644 tests/RenderScriptTests/SceneGraph/res/drawable-nodpi/checker.png create mode 100644 tests/RenderScriptTests/SceneGraph/res/drawable-nodpi/defaultcube.png create mode 100644 tests/RenderScriptTests/SceneGraph/res/drawable-nodpi/robot.png create mode 100644 tests/RenderScriptTests/SceneGraph/res/menu/loader_menu.xml create mode 100644 tests/RenderScriptTests/SceneGraph/res/raw/blur_h.glsl create mode 100644 tests/RenderScriptTests/SceneGraph/res/raw/blur_v.glsl create mode 100644 tests/RenderScriptTests/SceneGraph/res/raw/blur_vertex.glsl create mode 100644 tests/RenderScriptTests/SceneGraph/res/raw/diffuse.glsl create mode 100644 tests/RenderScriptTests/SceneGraph/res/raw/metal.glsl create mode 100644 tests/RenderScriptTests/SceneGraph/res/raw/paintf.glsl create mode 100644 tests/RenderScriptTests/SceneGraph/res/raw/plastic.glsl create mode 100644 tests/RenderScriptTests/SceneGraph/res/raw/robot.a3d create mode 100644 tests/RenderScriptTests/SceneGraph/res/raw/select_color.glsl create mode 100644 tests/RenderScriptTests/SceneGraph/res/raw/shader2v.glsl create mode 100644 tests/RenderScriptTests/SceneGraph/res/raw/texture.glsl create mode 100644 tests/RenderScriptTests/SceneGraph/res/values/strings.xml create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Camera.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ColladaParser.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ColladaScene.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/CompoundTransform.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Drawable.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/DrawableBase.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/DrawableGroup.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/FileSelector.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Float4Param.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/LightBase.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/MatrixTransform.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/PointLight.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/RenderPass.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/RenderState.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Scene.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraph.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraphBase.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraphRS.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraphView.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneManager.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ShaderParam.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Texture2D.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TextureParam.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TouchHandler.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Transform.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TransformParam.java create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/camera.rs create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/export.rs create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/render.rs create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/scenegraph.rs create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/transform.rs create mode 100644 tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/transform_def.rsh diff --git a/tests/RenderScriptTests/SceneGraph/Android.mk b/tests/RenderScriptTests/SceneGraph/Android.mk new file mode 100644 index 0000000000000..ba4b3c50f3aeb --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/Android.mk @@ -0,0 +1,26 @@ +# +# Copyright (C) 2011 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_MODULE_TAGS := optional + +LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-renderscript-files-under, src) + +LOCAL_PACKAGE_NAME := SceneGraphTest + +include $(BUILD_PACKAGE) diff --git a/tests/RenderScriptTests/SceneGraph/AndroidManifest.xml b/tests/RenderScriptTests/SceneGraph/AndroidManifest.xml new file mode 100644 index 0000000000000..4de8c2999e6a2 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/res/drawable-nodpi/checker.png b/tests/RenderScriptTests/SceneGraph/res/drawable-nodpi/checker.png new file mode 100644 index 0000000000000000000000000000000000000000..4bf9de5b5bb2e03d0c4e1ef40756a7b3140083ec GIT binary patch literal 8422 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 ABme*a literal 0 HcmV?d00001 diff --git a/tests/RenderScriptTests/SceneGraph/res/drawable-nodpi/defaultcube.png b/tests/RenderScriptTests/SceneGraph/res/drawable-nodpi/defaultcube.png new file mode 100644 index 0000000000000000000000000000000000000000..351fc125aeb76d1d1c60f4a3c248ee18ff0955fb GIT binary patch literal 2791 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 L5eO;o3;a_X@C*>71)Oyje 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

!z**K@kIBvhg4%1$IUhb+a6Tedu!xVUllqd$ zm&|^m?rx7V183S-9^Z+~t7xOD9!OphN*F{Vbw35I<6n(M$k-}`k0*E~M5^MZWQL{5 zfx&575*^8EquvF~OKW9{3Si^%PfCBtCNBXV=+w70o_@dKGtrbV8S@(sYmbAf+wP{4 zOft&MeL7~xN4PADz4hLipI(})%3kav1CtwNKB$+O6fYGjmHQ_oU$Vl+uz_%q+!f{R zMP-!p{?ZAfB@=s01EvT_jzWec&X=G3$@R~E{zhBa_^YY<9h9+}`c4%D)_TRl1QCh5 z2&0j_ri}z1Fs~B&Wfg&%)i7DpWGPF8&S!=1gGaQcmy7@H|NZov&u>p>CO3|aIoro9 zEhG;YUbO^mD*0unWUOwNksN6Tdy&0xDJk+I`x�? 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

+ + + diff --git a/tests/RenderScriptTests/SceneGraph/res/raw/blur_h.glsl b/tests/RenderScriptTests/SceneGraph/res/raw/blur_h.glsl new file mode 100644 index 0000000000000..fa468cc3620cd --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/res/raw/blur_h.glsl @@ -0,0 +1,15 @@ +varying vec2 varTex0; + +void main() { + vec2 blurCoord = varTex0; + blurCoord.x = varTex0.x + UNI_blurOffset0; + vec3 col = texture2D(UNI_Tex0, blurCoord).rgb; + blurCoord.x = varTex0.x + UNI_blurOffset1; + col += texture2D(UNI_Tex0, blurCoord).rgb; + blurCoord.x = varTex0.x + UNI_blurOffset2; + col += texture2D(UNI_Tex0, blurCoord).rgb; + blurCoord.x = varTex0.x + UNI_blurOffset3; + col += texture2D(UNI_Tex0, blurCoord).rgb; + + gl_FragColor = vec4(col * 0.25, 0.0); //texture2D(UNI_Tex0, varTex0); +} diff --git a/tests/RenderScriptTests/SceneGraph/res/raw/blur_v.glsl b/tests/RenderScriptTests/SceneGraph/res/raw/blur_v.glsl new file mode 100644 index 0000000000000..a644a3e6b8fb9 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/res/raw/blur_v.glsl @@ -0,0 +1,17 @@ +varying vec2 varTex0; + +void main() { + vec2 blurCoord = varTex0; + blurCoord.y = varTex0.y + UNI_blurOffset0; + vec3 col = texture2D(UNI_Tex0, blurCoord).rgb; + blurCoord.y = varTex0.y + UNI_blurOffset1; + col += texture2D(UNI_Tex0, blurCoord).rgb; + blurCoord.y = varTex0.y + UNI_blurOffset2; + col += texture2D(UNI_Tex0, blurCoord).rgb; + blurCoord.y = varTex0.y + UNI_blurOffset3; + col += texture2D(UNI_Tex0, blurCoord).rgb; + + col = col * 0.25; + + gl_FragColor = vec4(col, 0.0); //texture2D(UNI_Tex0, varTex0); +} diff --git a/tests/RenderScriptTests/SceneGraph/res/raw/blur_vertex.glsl b/tests/RenderScriptTests/SceneGraph/res/raw/blur_vertex.glsl new file mode 100644 index 0000000000000..bc824b6eb77e6 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/res/raw/blur_vertex.glsl @@ -0,0 +1,7 @@ +varying vec2 varTex0; + +void main() { + gl_Position = ATTRIB_position; + varTex0 = ATTRIB_texture0; +} + diff --git a/tests/RenderScriptTests/SceneGraph/res/raw/diffuse.glsl b/tests/RenderScriptTests/SceneGraph/res/raw/diffuse.glsl new file mode 100644 index 0000000000000..5d8938bc5a4ea --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/res/raw/diffuse.glsl @@ -0,0 +1,19 @@ +varying vec3 varWorldPos; +varying vec3 varWorldNormal; +varying vec2 varTex0; + +void main() { + + vec3 V = normalize(UNI_cameraPos.xyz - varWorldPos.xyz); + vec3 worldNorm = (varWorldNormal); + + vec3 light0Vec = V; + vec3 light0R = reflect(light0Vec, worldNorm); + float light0_Diffuse = dot(worldNorm, light0Vec); + + vec2 t0 = varTex0.xy; + lowp vec4 col = texture2D(UNI_Tex0, t0).rgba; + col.xyz = col.xyz * light0_Diffuse * 1.2; + gl_FragColor = col; //vec4(0.0, 1.0, 0.0, 0.0); +} + diff --git a/tests/RenderScriptTests/SceneGraph/res/raw/metal.glsl b/tests/RenderScriptTests/SceneGraph/res/raw/metal.glsl new file mode 100644 index 0000000000000..51f06124d7590 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/res/raw/metal.glsl @@ -0,0 +1,23 @@ +varying vec3 varWorldPos; +varying vec3 varWorldNormal; +varying vec2 varTex0; + +void main() { + + vec3 V = normalize(UNI_cameraPos.xyz - varWorldPos.xyz); + vec3 worldNorm = normalize(varWorldNormal); + + vec3 light0Vec = V; + vec3 light0R = reflect(light0Vec, worldNorm); + float light0_Diffuse = clamp(dot(worldNorm, light0Vec), 0.0, 1.0); + float light0Spec = clamp(dot(-light0R, V), 0.001, 1.0); + float light0_Specular = pow(light0Spec, 15.0) * 0.5; + + vec2 t0 = varTex0.xy; + lowp vec4 col = texture2D(UNI_Tex0, t0).rgba; + col.xyz = col.xyz * (textureCube(UNI_Tex1, worldNorm).rgb * 0.5 + vec3(light0_Diffuse)); + col.xyz += light0_Specular * vec3(0.8, 0.8, 1.0); + + gl_FragColor = col; +} + diff --git a/tests/RenderScriptTests/SceneGraph/res/raw/paintf.glsl b/tests/RenderScriptTests/SceneGraph/res/raw/paintf.glsl new file mode 100644 index 0000000000000..893d553990034 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/res/raw/paintf.glsl @@ -0,0 +1,26 @@ +varying vec3 varWorldPos; +varying vec3 varWorldNormal; +varying vec2 varTex0; + +void main() { + + vec3 V = normalize(UNI_cameraPos.xyz - varWorldPos.xyz); + vec3 worldNorm = normalize(varWorldNormal); + + vec3 light0Vec = V; + vec3 light0R = reflect(light0Vec, worldNorm); + float light0_Diffuse = clamp(dot(worldNorm, light0Vec), 0.01, 0.99); + float light0Spec = clamp(dot(-light0R, V), 0.001, 1.0); + float light0_Specular = pow(light0Spec, 150.0) * 0.5; + + vec2 t0 = varTex0.xy; + lowp vec4 col = texture2D(UNI_Tex0, t0).rgba; + col.xyz = col.xyz * light0_Diffuse * 1.1; + col.xyz += light0_Specular * vec3(0.8, 0.8, 1.0); + + float fresnel = mix(pow(1.0 - light0_Diffuse, 15.0), 1.0, 0.1); + col.xyz = mix(col.xyz, textureCube(UNI_Tex1, -light0R).rgb * 2.4, fresnel); + col.w = 0.8; + gl_FragColor = col; +} + diff --git a/tests/RenderScriptTests/SceneGraph/res/raw/plastic.glsl b/tests/RenderScriptTests/SceneGraph/res/raw/plastic.glsl new file mode 100644 index 0000000000000..ceb53bd232d23 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/res/raw/plastic.glsl @@ -0,0 +1,22 @@ +varying vec3 varWorldPos; +varying vec3 varWorldNormal; +varying vec2 varTex0; + +void main() { + + vec3 V = normalize(UNI_cameraPos.xyz - varWorldPos.xyz); + vec3 worldNorm = normalize(varWorldNormal); + + vec3 light0Vec = V; + vec3 light0R = reflect(light0Vec, worldNorm); + float light0_Diffuse = clamp(dot(worldNorm, light0Vec), 0.0, 1.0); + float light0Spec = clamp(dot(-light0R, V), 0.001, 1.0); + float light0_Specular = pow(light0Spec, 10.0) * 0.5; + + vec2 t0 = varTex0.xy; + lowp vec4 col = texture2D(UNI_Tex0, t0).rgba; + col.xyz = col.xyz * light0_Diffuse * 1.2; + col.xyz += light0_Specular * vec3(0.8, 0.8, 1.0); + gl_FragColor = col; +} + diff --git a/tests/RenderScriptTests/SceneGraph/res/raw/robot.a3d b/tests/RenderScriptTests/SceneGraph/res/raw/robot.a3d new file mode 100644 index 0000000000000000000000000000000000000000..f48895cd8451bb62c23638e97954e6ef3241a1c8 GIT binary patch literal 144528 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

R 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

ud!4OhZd_zYYHSL3sAHC%(w!8LF#J`dNzb@&2Y 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 literal 0 HcmV?d00001 diff --git a/tests/RenderScriptTests/SceneGraph/res/raw/select_color.glsl b/tests/RenderScriptTests/SceneGraph/res/raw/select_color.glsl new file mode 100644 index 0000000000000..59a267b512acd --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/res/raw/select_color.glsl @@ -0,0 +1,13 @@ +varying vec2 varTex0; + +void main() { + vec3 col = texture2D(UNI_Tex0, varTex0).rgb; + + vec3 desat = vec3(0.299, 0.587, 0.114); + float lum = dot(desat, col); + float stepVal = step(lum, 0.8); + col = mix(col, vec3(0.0), stepVal)*0.8; + + gl_FragColor = vec4(col, 0.0); +} + diff --git a/tests/RenderScriptTests/SceneGraph/res/raw/shader2v.glsl b/tests/RenderScriptTests/SceneGraph/res/raw/shader2v.glsl new file mode 100644 index 0000000000000..1ea234f0a77be --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/res/raw/shader2v.glsl @@ -0,0 +1,17 @@ +varying vec3 varWorldPos; +varying vec3 varWorldNormal; +varying vec2 varTex0; + +// This is where actual shader code begins +void main() { + vec4 objPos = ATTRIB_position; + vec4 worldPos = UNI_model * objPos; + gl_Position = UNI_viewProj * worldPos; + + mat3 model3 = mat3(UNI_model[0].xyz, UNI_model[1].xyz, UNI_model[2].xyz); + vec3 worldNorm = model3 * ATTRIB_normal; + + varWorldPos = worldPos.xyz; + varWorldNormal = worldNorm; + varTex0 = ATTRIB_texture0; +} diff --git a/tests/RenderScriptTests/SceneGraph/res/raw/texture.glsl b/tests/RenderScriptTests/SceneGraph/res/raw/texture.glsl new file mode 100644 index 0000000000000..dd709cf01f9dd --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/res/raw/texture.glsl @@ -0,0 +1,7 @@ +varying vec2 varTex0; + +void main() { + lowp vec4 col = texture2D(UNI_Tex0, varTex0).rgba; + gl_FragColor = col; +} + diff --git a/tests/RenderScriptTests/SceneGraph/res/values/strings.xml b/tests/RenderScriptTests/SceneGraph/res/values/strings.xml new file mode 100644 index 0000000000000..c916d791c1439 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/res/values/strings.xml @@ -0,0 +1,24 @@ + + + + + + Load Model + Use Blur + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Camera.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Camera.java new file mode 100644 index 0000000000000..d220df9e02a69 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Camera.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; + +import android.renderscript.Matrix4f; +import android.renderscript.RenderScriptGL; +import android.renderscript.*; +import android.util.Log; + +/** + * @hide + */ +public class Camera extends SceneGraphBase { + + Transform mTransform; + float mFOV; + float mNear; + float mFar; + + ScriptField_Camera_s mField; + + public Camera() { + mFOV = 60.0f; + mNear = 0.1f; + mFar = 100.0f; + } + + public void setTransform(Transform t) { + mTransform = t; + } + public void setFOV(float fov) { + mFOV = fov; + } + + public void setNear(float n) { + mNear = n; + } + + public void setFar(float f) { + mFar = f; + } + + ScriptField_Camera_s getRSData(RenderScriptGL rs) { + if (mField != null) { + return mField; + } + + mField = new ScriptField_Camera_s(rs, 1); + ScriptField_Camera_s.Item cam = new ScriptField_Camera_s.Item(); + cam.horizontalFOV = mFOV; + cam.near = mNear; + cam.far = mFar; + cam.transformMatrix = mTransform.getRSData(rs).getAllocation(); + cam.name = getStringAsAllocation(rs, getName()); + mField.set(cam, 0, true); + + return mField; + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ColladaParser.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ColladaParser.java new file mode 100644 index 0000000000000..c7caf8d4b4ccf --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ColladaParser.java @@ -0,0 +1,528 @@ +/* + * Copyright (C) 2011 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.scenegraph; +import com.android.scenegraph.CompoundTransform.TranslateComponent; +import com.android.scenegraph.CompoundTransform.RotateComponent; +import com.android.scenegraph.CompoundTransform.ScaleComponent; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.StringTokenizer; +import java.util.HashMap; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +import android.renderscript.*; +import android.util.Log; + +public class ColladaParser { + static final String TAG = "ColladaParser"; + Document mDom; + + HashMap mLights; + HashMap mCameras; + HashMap > mEffectsParams; + HashMap mImages; + HashMap mSamplerImageMap; + Scene mScene; + + String toString(Float3 v) { + String valueStr = v.x + " " + v.y + " " + v.z; + return valueStr; + } + + String toString(Float4 v) { + String valueStr = v.x + " " + v.y + " " + v.z + " " + v.w; + return valueStr; + } + + public ColladaParser(){ + mLights = new HashMap(); + mCameras = new HashMap(); + mEffectsParams = new HashMap >(); + mImages = new HashMap(); + } + + public void init(InputStream is) { + mLights.clear(); + mCameras.clear(); + mEffectsParams.clear(); + + long start = System.currentTimeMillis(); + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + try { + DocumentBuilder db = dbf.newDocumentBuilder(); + mDom = db.parse(is); + } catch(ParserConfigurationException e) { + e.printStackTrace(); + } catch(SAXException e) { + e.printStackTrace(); + } catch(IOException e) { + e.printStackTrace(); + } + long end = System.currentTimeMillis(); + Log.v("TIMER", " Parse time: " + (end - start)); + exportSceneData(); + } + + Scene getScene() { + return mScene; + } + + private void exportSceneData(){ + mScene = new Scene(); + + Element docEle = mDom.getDocumentElement(); + NodeList nl = docEle.getElementsByTagName("light"); + if (nl != null) { + for(int i = 0; i < nl.getLength(); i++) { + Element l = (Element)nl.item(i); + convertLight(l); + } + } + + nl = docEle.getElementsByTagName("camera"); + if (nl != null) { + for(int i = 0; i < nl.getLength(); i++) { + Element c = (Element)nl.item(i); + convertCamera(c); + } + } + + nl = docEle.getElementsByTagName("image"); + if (nl != null) { + for(int i = 0; i < nl.getLength(); i++) { + Element img = (Element)nl.item(i); + convertImage(img); + } + } + + nl = docEle.getElementsByTagName("effect"); + if (nl != null) { + for(int i = 0; i < nl.getLength(); i++) { + Element e = (Element)nl.item(i); + convertEffects(e); + } + } + + // Material is just a link to the effect + nl = docEle.getElementsByTagName("material"); + if (nl != null) { + for(int i = 0; i < nl.getLength(); i++) { + Element m = (Element)nl.item(i); + convertMaterials(m); + } + } + + nl = docEle.getElementsByTagName("visual_scene"); + if (nl != null) { + for(int i = 0; i < nl.getLength(); i++) { + Element s = (Element)nl.item(i); + getScene(s); + } + } + } + + private void getDrawable(Element shape, Transform t) { + String geoURL = shape.getAttribute("url"); + //DrawableGroup group = new DrawableGroup(); + //group.setName(geoURL.substring(1)); + //mScene.appendDrawable(group); + NodeList nl = shape.getElementsByTagName("instance_material"); + if (nl != null) { + for(int i = 0; i < nl.getLength(); i++) { + Element materialRef = (Element)nl.item(i); + String meshIndexName = materialRef.getAttribute("symbol"); + String materialName = materialRef.getAttribute("target"); + + Drawable d = new Drawable(); + d.setMesh(geoURL.substring(1), meshIndexName); + d.setMaterialName(materialName); + d.setName(geoURL.substring(1)); + + //Log.v(TAG, "Created drawable geo " + geoURL + " index " + meshIndexName + " material " + materialName); + + // Append transform and material data here + TransformParam modelP = new TransformParam("model"); + modelP.setTransform(t); + d.appendSourceParams(modelP); + d.setTransform(t); + //Log.v(TAG, "Set source param " + t.getName()); + + // Now find all the parameters that exist on the material + ArrayList materialParams; + materialParams = mEffectsParams.get(materialName.substring(1)); + for (int pI = 0; pI < materialParams.size(); pI ++) { + d.appendSourceParams(materialParams.get(pI)); + //Log.v(TAG, "Set source param i: " + pI + " name " + materialParams.get(pI).getParamName()); + } + mScene.appendDrawable(d); + //group.appendChildren(d); + } + } + } + + private void updateLight(Element shape, Transform t) { + String lightURL = shape.getAttribute("url"); + // collada uses a uri structure to link things, + // but we ignore it for now and do a simple search + LightBase light = mLights.get(lightURL.substring(1)); + if (light != null) { + light.setTransform(t); + //Log.v(TAG, "Set Light " + light.getName() + " " + t.getName()); + } + } + + private void updateCamera(Element shape, Transform t) { + String camURL = shape.getAttribute("url"); + // collada uses a uri structure to link things, + // but we ignore it for now and do a simple search + Camera cam = mCameras.get(camURL.substring(1)); + if (cam != null) { + cam.setTransform(t); + //Log.v(TAG, "Set Camera " + cam.getName() + " " + t.getName()); + } + } + + private void getNode(Element node, Transform parent, String indent) { + String name = node.getAttribute("name"); + String id = node.getAttribute("id"); + CompoundTransform current = new CompoundTransform(); + current.setName(name); + if (parent != null) { + parent.appendChild(current); + } else { + mScene.appendTransform(current); + } + + mScene.addToTransformMap(current); + + //Log.v(TAG, indent + "|"); + //Log.v(TAG, indent + "[" + name + "]"); + + Node childNode = node.getFirstChild(); + while (childNode != null) { + if (childNode.getNodeType() == Node.ELEMENT_NODE) { + Element field = (Element)childNode; + String fieldName = field.getTagName(); + String description = field.getAttribute("sid"); + if (fieldName.equals("translate")) { + Float3 value = getFloat3(field); + current.addComponent(new TranslateComponent(description, value)); + //Log.v(TAG, indent + " translate " + description + toString(value)); + } else if (fieldName.equals("rotate")) { + Float4 value = getFloat4(field); + //Log.v(TAG, indent + " rotate " + description + toString(value)); + Float3 axis = new Float3(value.x, value.y, value.z); + current.addComponent(new RotateComponent(description, axis, value.w)); + } else if (fieldName.equals("scale")) { + Float3 value = getFloat3(field); + //Log.v(TAG, indent + " scale " + description + toString(value)); + current.addComponent(new ScaleComponent(description, value)); + } else if (fieldName.equals("instance_geometry")) { + getDrawable(field, current); + } else if (fieldName.equals("instance_light")) { + updateLight(field, current); + } else if (fieldName.equals("instance_camera")) { + updateCamera(field, current); + } else if (fieldName.equals("node")) { + getNode(field, current, indent + " "); + } + } + childNode = childNode.getNextSibling(); + } + } + + Texture2D getTexture(String samplerName) { + Element sampler = mDom.getElementById(samplerName); + if (sampler == null) { + return null; + } + + NodeList nl = sampler.getElementsByTagName("source"); + if (nl != null && nl.getLength() == 1) { + Element ref = (Element)nl.item(0); + String surfaceName = getString(ref); + if (surfaceName == null) { + return null; + } + + Element surface = mDom.getElementById(surfaceName); + if (surface == null) { + return null; + } + nl = surface.getElementsByTagName("init_from"); + if (nl != null && nl.getLength() == 1) { + ref = (Element)nl.item(0); + String texName = getString(ref); + //Log.v(TAG, "Extracted texture name " + texName); + return mImages.get(texName); + } + } + return null; + } + + void extractParams(Element fx, ArrayList params) { + Node paramNode = fx.getFirstChild(); + while (paramNode != null) { + if (paramNode.getNodeType() == Node.ELEMENT_NODE) { + String name = paramNode.getNodeName(); + // Now find what type it is + Node typeNode = paramNode.getFirstChild(); + while (typeNode != null && typeNode.getNodeType() != Node.ELEMENT_NODE) { + typeNode = typeNode.getNextSibling(); + } + String paramType = typeNode.getNodeName(); + Element typeElem = (Element)typeNode; + ShaderParam sceneParam = null; + if (paramType.equals("color")) { + Float4Param f4p = new Float4Param(name); + Float4 value = getFloat4(typeElem); + f4p.setValue(value); + sceneParam = f4p; + //Log.v(TAG, "Extracted " + sceneParam.getParamName() + " value " + toString(value)); + } else if (paramType.equals("float")) { + Float4Param f4p = new Float4Param(name); + float value = getFloat(typeElem); + f4p.setValue(new Float4(value, value, value, value)); + sceneParam = f4p; + //Log.v(TAG, "Extracted " + sceneParam.getParamName() + " value " + value); + } else if (paramType.equals("texture")) { + String samplerName = typeElem.getAttribute("texture"); + Texture2D tex = getTexture(samplerName); + TextureParam texP = new TextureParam(name); + texP.setTexture(tex); + sceneParam = texP; + //Log.v(TAG, "Extracted texture " + tex); + } + if (sceneParam != null) { + params.add(sceneParam); + } + } + paramNode = paramNode.getNextSibling(); + } + } + + private void convertMaterials(Element mat) { + String id = mat.getAttribute("id"); + NodeList nl = mat.getElementsByTagName("instance_effect"); + if (nl != null && nl.getLength() == 1) { + Element ref = (Element)nl.item(0); + String url = ref.getAttribute("url"); + ArrayList params = mEffectsParams.get(url.substring(1)); + mEffectsParams.put(id, params); + } + } + + private void convertEffects(Element fx) { + String id = fx.getAttribute("id"); + ArrayList params = new ArrayList(); + + NodeList nl = fx.getElementsByTagName("newparam"); + if (nl != null) { + for(int i = 0; i < nl.getLength(); i++) { + Element field = (Element)nl.item(i); + field.setIdAttribute("sid", true); + } + } + + nl = fx.getElementsByTagName("blinn"); + if (nl != null) { + for(int i = 0; i < nl.getLength(); i++) { + Element field = (Element)nl.item(i); + //Log.v(TAG, "blinn"); + extractParams(field, params); + } + } + nl = fx.getElementsByTagName("lambert"); + if (nl != null) { + for(int i = 0; i < nl.getLength(); i++) { + Element field = (Element)nl.item(i); + //Log.v(TAG, "lambert"); + extractParams(field, params); + } + } + nl = fx.getElementsByTagName("phong"); + if (nl != null) { + for(int i = 0; i < nl.getLength(); i++) { + Element field = (Element)nl.item(i); + //Log.v(TAG, "phong"); + extractParams(field, params); + } + } + mEffectsParams.put(id, params); + } + + private void convertLight(Element light) { + String name = light.getAttribute("name"); + String id = light.getAttribute("id"); + + // Determine type + String[] knownTypes = { "point", "spot", "directional" }; + final int POINT_LIGHT = 0; + final int SPOT_LIGHT = 1; + final int DIR_LIGHT = 2; + int type = -1; + for (int i = 0; i < knownTypes.length; i ++) { + NodeList nl = light.getElementsByTagName(knownTypes[i]); + if (nl != null && nl.getLength() != 0) { + type = i; + break; + } + } + + //Log.v(TAG, "Found Light Type " + type); + + LightBase sceneLight = null; + switch (type) { + case POINT_LIGHT: + sceneLight = new PointLight(); + break; + case SPOT_LIGHT: // TODO: finish light types + break; + case DIR_LIGHT: // TODO: finish light types + break; + } + + if (sceneLight == null) { + return; + } + + Float3 color = getFloat3(light, "color"); + sceneLight.setColor(color); + sceneLight.setName(name); + mScene.appendLight(sceneLight); + mLights.put(id, sceneLight); + + //Log.v(TAG, "Light " + name + " color " + toString(color)); + } + + private void convertCamera(Element camera) { + String name = camera.getAttribute("name"); + String id = camera.getAttribute("id"); + float fov = getFloat(camera, "yfov"); + float near = getFloat(camera, "znear"); + float far = getFloat(camera, "zfar"); + + Camera sceneCamera = new Camera(); + sceneCamera.setFOV(fov); + sceneCamera.setNear(near); + sceneCamera.setFar(far); + sceneCamera.setName(name); + mScene.appendCamera(sceneCamera); + mCameras.put(id, sceneCamera); + } + + private void convertImage(Element img) { + String name = img.getAttribute("name"); + String id = img.getAttribute("id"); + String file = getString(img, "init_from"); + + Texture2D tex = new Texture2D(); + tex.setFileName(file); + mScene.appendTextures(tex); + mImages.put(id, tex); + } + + private void getScene(Element scene) { + String name = scene.getAttribute("name"); + String id = scene.getAttribute("id"); + + Node childNode = scene.getFirstChild(); + while (childNode != null) { + if (childNode.getNodeType() == Node.ELEMENT_NODE) { + String indent = ""; + getNode((Element)childNode, null, indent); + } + childNode = childNode.getNextSibling(); + } + } + + private String getString(Element elem, String name) { + String text = null; + NodeList nl = elem.getElementsByTagName(name); + if (nl != null) { + text = ((Element)nl.item(0)).getFirstChild().getNodeValue(); + } + return text; + } + + private String getString(Element elem) { + String text = null; + text = elem.getFirstChild().getNodeValue(); + return text; + } + + private int getInt(Element elem, String name) { + return Integer.parseInt(getString(elem, name)); + } + + private float getFloat(Element elem, String name) { + return Float.parseFloat(getString(elem, name)); + } + + private float getFloat(Element elem) { + return Float.parseFloat(getString(elem)); + } + + private Float3 parseFloat3(String valueString) { + StringTokenizer st = new StringTokenizer(valueString); + float x = Float.parseFloat(st.nextToken()); + float y = Float.parseFloat(st.nextToken()); + float z = Float.parseFloat(st.nextToken()); + return new Float3(x, y, z); + } + + private Float4 parseFloat4(String valueString) { + StringTokenizer st = new StringTokenizer(valueString); + float x = Float.parseFloat(st.nextToken()); + float y = Float.parseFloat(st.nextToken()); + float z = Float.parseFloat(st.nextToken()); + float w = Float.parseFloat(st.nextToken()); + return new Float4(x, y, z, w); + } + + private Float3 getFloat3(Element elem, String name) { + String valueString = getString(elem, name); + return parseFloat3(valueString); + } + + private Float4 getFloat4(Element elem, String name) { + String valueString = getString(elem, name); + return parseFloat4(valueString); + } + + private Float3 getFloat3(Element elem) { + String valueString = getString(elem); + return parseFloat3(valueString); + } + + private Float4 getFloat4(Element elem) { + String valueString = getString(elem); + return parseFloat4(valueString); + } +} diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ColladaScene.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ColladaScene.java new file mode 100644 index 0000000000000..9394b66fc14a2 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ColladaScene.java @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.FileInputStream; +import java.io.BufferedInputStream; +import java.io.Writer; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Vector; + +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.AsyncTask; +import android.renderscript.*; +import android.renderscript.Allocation.MipmapControl; +import android.renderscript.Element.Builder; +import android.renderscript.Font.Style; +import android.renderscript.Program.TextureType; +import android.renderscript.ProgramStore.DepthFunc; +import android.util.Log; +import com.android.scenegraph.SceneManager.SceneLoadedCallback; + + +public class ColladaScene { + + private String modelName; + private static String TAG = "ColladaScene"; + private final int STATE_LAST_FOCUS = 1; + private final boolean mLoadFromSD = true; + private static String mSDCardPath = "sdcard/scenegraph/"; + + SceneGraphRS mRenderer; + SceneLoadedCallback mCallback; + + public ColladaScene(String name, SceneGraphRS renderer) { + modelName = name; + mRenderer = renderer; + } + + public ColladaScene(String name, SceneLoadedCallback cb) { + modelName = name; + mCallback = cb; + } + + public void init(RenderScriptGL rs, Resources res) { + mRS = rs; + mRes = res; + + new ColladaLoaderTask().execute(modelName + ".dae"); + } + + private Resources mRes; + private RenderScriptGL mRS; + Scene mActiveScene; + + private class ColladaLoaderTask extends AsyncTask { + ColladaParser sceneSource; + protected Boolean doInBackground(String... names) { + long start = System.currentTimeMillis(); + sceneSource = new ColladaParser(); + InputStream is = null; + try { + if (!mLoadFromSD) { + is = mRes.getAssets().open(names[0]); + } else { + File f = new File(mSDCardPath + names[0]); + is = new BufferedInputStream(new FileInputStream(f)); + } + } catch (IOException e) { + Log.e(TAG, "Could not open collada file"); + return new Boolean(false); + } + long end = System.currentTimeMillis(); + Log.v("TIMER", "Stream load time: " + (end - start)); + + start = System.currentTimeMillis(); + sceneSource.init(is); + end = System.currentTimeMillis(); + Log.v("TIMER", "Collada parse time: " + (end - start)); + return new Boolean(true); + } + + protected void onPostExecute(Boolean result) { + mActiveScene = sceneSource.getScene(); + if (mRenderer != null) { + mRenderer.prepareToRender(mActiveScene); + } + if (mCallback != null) { + mCallback.mLoadedScene = mActiveScene; + mCallback.run(); + } + + new A3DLoaderTask().execute(modelName + ".a3d"); + } + } + + private class A3DLoaderTask extends AsyncTask { + protected Boolean doInBackground(String... names) { + long start = System.currentTimeMillis(); + FileA3D model; + if (!mLoadFromSD) { + model = FileA3D.createFromAsset(mRS, mRes.getAssets(), names[0]); + } else { + model = FileA3D.createFromFile(mRS, mSDCardPath + names[0]); + } + int numModels = model.getIndexEntryCount(); + for (int i = 0; i < numModels; i ++) { + FileA3D.IndexEntry entry = model.getIndexEntry(i); + if (entry != null && entry.getEntryType() == FileA3D.EntryType.MESH) { + mActiveScene.meshLoaded(entry.getMesh()); + } + } + long end = System.currentTimeMillis(); + Log.v("TIMER", "A3D load time: " + (end - start)); + return new Boolean(true); + } + + protected void onPostExecute(Boolean result) { + } + } + +} + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/CompoundTransform.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/CompoundTransform.java new file mode 100644 index 0000000000000..0de6ba20c3af2 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/CompoundTransform.java @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; + +import android.renderscript.*; +import android.renderscript.Float3; +import android.renderscript.Matrix4f; +import android.util.Log; + +/** + * @hide + */ +public class CompoundTransform extends Transform { + + public static class Component { + String mName; + int mRsId; + public Float4 mValue; + + public String getName() { + return mName; + } + } + + public static class TranslateComponent extends Component { + public TranslateComponent(String name, Float3 translate) { + mRsId = RS_ID_TRANSLATE; + mName = name; + mValue = new Float4(translate.x, translate.y, translate.z, 0); + } + } + + public static class RotateComponent extends Component { + public RotateComponent(String name, Float3 axis, float angle) { + mRsId = RS_ID_ROTATE; + mName = name; + mValue = new Float4(axis.x, axis.y, axis.z, angle); + } + } + + public static class ScaleComponent extends Component { + public ScaleComponent(String name, Float3 scale) { + mRsId = RS_ID_SCALE; + mName = name; + mValue = new Float4(scale.x, scale.y, scale.z, 0); + } + } + + public ArrayList mTransformComponents; + + Matrix4f mLocalMatrix; + Matrix4f mGlobalMatrix; + + public CompoundTransform() { + mTransformComponents = new ArrayList(); + } + + public void addComponent(Component c) { + mTransformComponents.add(c); + } + + public void setComponent(int index, Component c) { + mTransformComponents.set(index, c); + } + + void initLocalData() { + mTransformData = new ScriptField_SgTransform.Item(); + int numElements = mTransformComponents.size(); + for (int i = 0; i < numElements; i ++) { + Component ith = mTransformComponents.get(i); + mTransformData.transforms[i] = ith.mValue; + mTransformData.transformTypes[i] = ith.mRsId; + mTransformData.transformNames[i] = getStringAsAllocation(mRS, ith.mName); + } + // "null" terminate the array + mTransformData.transformTypes[numElements] = RS_ID_NONE; + + mTransformData.isDirty = 1; + mTransformData.children = null; + mTransformData.name = getStringAsAllocation(mRS, getName()); + } + + public void updateRSData() { + int numElements = mTransformComponents.size(); + for (int i = 0; i < numElements; i ++) { + Component ith = mTransformComponents.get(i); + mTransformData.transforms[i] = ith.mValue; + mTransformData.transformTypes[i] = ith.mRsId; + mTransformData.transformNames[i] = getStringAsAllocation(mRS, ith.mName); + } + // "null" terminate the array + mTransformData.transformTypes[numElements] = RS_ID_NONE; + mTransformData.isDirty = 1; + mField.set(mTransformData, 0, true); + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Drawable.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Drawable.java new file mode 100644 index 0000000000000..2eaca138bacc7 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Drawable.java @@ -0,0 +1,178 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; +import java.util.HashMap; + +import android.renderscript.Allocation; +import android.renderscript.Matrix4f; +import android.renderscript.Mesh; +import android.renderscript.ProgramFragment; +import android.renderscript.ProgramStore; +import android.renderscript.ProgramVertex; +import android.renderscript.RenderScriptGL; +import android.util.Log; +import android.content.res.Resources; + +/** + * @hide + */ +public class Drawable extends DrawableBase { + Allocation mVertexParams; + Allocation mFragmentParams; + ArrayList mFragmentTextures; + ArrayList mVertexParam; + ArrayList mFragmentParam; + ArrayList mSourceParams; + Mesh mMesh; + int mMeshIndex; + + int mCullType; + + RenderState mRenderState; + + Transform mTransform; + + String mMeshName; + String mMeshIndexName; + + public String mMaterialName; + + // quick hack to prototype + int sceneIndex; + + ScriptField_Drawable_s mRsField; + ScriptField_Drawable_s.Item mRsFieldItem; + + public Drawable() { + mSourceParams = new ArrayList(); + } + + public void setCullType(int cull) { + mCullType = cull; + } + + public void setRenderState(RenderState renderState) { + mRenderState = renderState; + } + + public void setMesh(Mesh mesh) { + mMesh = mesh; + } + + public void setMesh(String mesh, String indexName) { + mMeshName = mesh; + mMeshIndexName = indexName; + } + + public void setMaterialName(String name) { + mMaterialName = name; + } + + public void setTransform(Transform t) { + mTransform = t; + } + + public void appendSourceParams(ShaderParam p) { + mSourceParams.add(p); + } + + public void resolveMeshData(Mesh mMesh) { + mMesh = mMesh; + if (mMesh == null) { + Log.v("DRAWABLE: ", "*** NO MESH *** " + mMeshName); + return; + } + int subIndexCount = mMesh.getPrimitiveCount(); + if (subIndexCount == 1 || mMeshIndexName == null) { + mMeshIndex = 0; + } else { + for (int i = 0; i < subIndexCount; i ++) { + if (mMesh.getIndexSetAllocation(i).getName().equals(mMeshIndexName)) { + mMeshIndex = i; + break; + } + } + } + + mRsFieldItem.mesh = mMesh; + mRsFieldItem.meshIndex = mMeshIndex; + + mRsField.set(mRsFieldItem, 0, true); + } + + void updateTextures(RenderScriptGL rs, Resources res) { + for (int i = 0; i < mSourceParams.size(); i ++) { + ShaderParam sp = mSourceParams.get(i); + if (sp instanceof TextureParam) { + TextureParam p = (TextureParam)sp; + mRsFieldItem.pf_textures[0] = p.getTexture().getRsData(rs, res); + break; + } + } + mRsField.set(mRsFieldItem, 0, true); + } + + void updateTextures(RenderScriptGL rs, Allocation a, int slot) { + getRsFieldItem(rs, null); + mRsFieldItem.pf_textures[slot] = a; + } + + void setVisible(RenderScriptGL rs, boolean vis) { + getRsField(rs, null); + mRsFieldItem.cullType = vis ? 0 : 2; + mRsField.set(mRsFieldItem, 0, true); + } + + ScriptField_Drawable_s getRsField(RenderScriptGL rs, Resources res) { + if (mRsField != null) { + return mRsField; + } + getRsFieldItem(rs, res); + + mRsField = new ScriptField_Drawable_s(rs, 1); + mRsField.set(mRsFieldItem, 0, true); + + return mRsField; + } + + void getRsFieldItem(RenderScriptGL rs, Resources res) { + if (mRsFieldItem != null) { + return; + } + + mRsFieldItem = new ScriptField_Drawable_s.Item(); + mRsFieldItem.mesh = mMesh; + mRsFieldItem.meshIndex = mMeshIndex; + mRsFieldItem.pv_const = mVertexParams; + mRsFieldItem.pf_const = mFragmentParams; + if (mTransform != null) { + mRsFieldItem.transformMatrix = mTransform.getRSData(rs).getAllocation(); + } + mRsFieldItem.name = getStringAsAllocation(rs, getName()); + mRsFieldItem.render_state = mRenderState.getRSData(rs).getAllocation(); + mRsFieldItem.bVolInitialized = 0; + mRsFieldItem.cullType = mCullType; + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/DrawableBase.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/DrawableBase.java new file mode 100644 index 0000000000000..113ccd4c1c228 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/DrawableBase.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; + +import android.renderscript.Matrix4f; +import android.renderscript.ProgramFragment; +import android.renderscript.ProgramStore; +import android.renderscript.ProgramVertex; +import android.util.Log; + +/** + * @hide + */ +public class DrawableBase extends SceneGraphBase { + public DrawableBase() { + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/DrawableGroup.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/DrawableGroup.java new file mode 100644 index 0000000000000..ac44f0be49474 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/DrawableGroup.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; + +import android.renderscript.Matrix4f; +import android.renderscript.ProgramFragment; +import android.renderscript.ProgramStore; +import android.renderscript.ProgramVertex; +import android.util.Log; + +/** + * @hide + */ +public class DrawableGroup extends DrawableBase { + + ArrayList mChildren; + + public DrawableGroup() { + mChildren = new ArrayList(); + } + + public void appendChildren(DrawableBase d) { + mChildren.add(d); + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/FileSelector.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/FileSelector.java new file mode 100644 index 0000000000000..691b433271da9 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/FileSelector.java @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.io.File; +import java.io.FileFilter; +import java.util.ArrayList; +import java.util.List; + +import android.app.ListActivity; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +/** + * A list view where the last item the user clicked is placed in + * the "activated" state, causing its background to highlight. + */ +public class FileSelector extends ListActivity { + + File[] mCurrentSubList; + File mCurrentFile; + + class DAEFilter implements FileFilter { + public boolean accept(File file) { + if (file.isDirectory()) { + return true; + } + return file.getName().endsWith(".dae"); + } + } + + private void populateList(File file) { + + mCurrentFile = file; + setTitle(mCurrentFile.getAbsolutePath() + "/*.dae"); + List names = new ArrayList(); + names.add(".."); + + mCurrentSubList = mCurrentFile.listFiles(new DAEFilter()); + + if (mCurrentSubList != null) { + for (int i = 0; i < mCurrentSubList.length; i ++) { + String fileName = mCurrentSubList[i].getName(); + if (mCurrentSubList[i].isDirectory()) { + fileName = "/" + fileName; + } + names.add(fileName); + } + } + + // Use the built-in layout for showing a list item with a single + // line of text whose background is changes when activated. + setListAdapter(new ArrayAdapter(this, + android.R.layout.simple_list_item_activated_1, names)); + getListView().setTextFilterEnabled(true); + + // Tell the list view to show one checked/activated item at a time. + getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + populateList(new File("/sdcard/")); + } + + @Override + protected void onListItemClick(ListView l, View v, int position, long id) { + if (position == 0) { + File parent = mCurrentFile.getParentFile(); + if (parent == null) { + return; + } + populateList(parent); + return; + } + + // the first thing in list is parent directory + File selectedFile = mCurrentSubList[position - 1]; + if (selectedFile.isDirectory()) { + populateList(selectedFile); + return; + } + + Intent resultIntent = new Intent(); + resultIntent.setData(Uri.fromFile(selectedFile)); + setResult(RESULT_OK, resultIntent); + finish(); + } + +} diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Float4Param.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Float4Param.java new file mode 100644 index 0000000000000..b40db64eeeca7 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Float4Param.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; + +import android.graphics.Camera; +import android.renderscript.Float4; +import android.renderscript.Matrix4f; +import android.renderscript.ProgramFragment; +import android.renderscript.ProgramStore; +import android.renderscript.ProgramVertex; +import android.renderscript.Element; +import android.util.Log; + +/** + * @hide + */ +public class Float4Param extends ShaderParam { + + public static final int VALUE = 0; + public static final int CAMERA_POSITION = 1; + public static final int CAMERA_DIRECTION = 2; + public static final int LIGHT_POSITION = 3; + public static final int LIGHT_COLOR = 4; + public static final int LIGHT_DIRECTION = 5; + Float4 mValue; + Camera mCamera; + LightBase mLight; + + public Float4Param(String name) { + super(name); + } + + public void setValue(Float4 v) { + mValue = v; + } + + public Float4 getValue() { + return mValue; + } + + public void setCamera(Camera c) { + mCamera = c; + } + + public void setLight(LightBase l) { + mLight = l; + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/LightBase.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/LightBase.java new file mode 100644 index 0000000000000..7aad1f8e21e93 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/LightBase.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; + +import android.renderscript.Float3; +import android.renderscript.Matrix4f; +import android.renderscript.ProgramFragment; +import android.renderscript.ProgramStore; +import android.renderscript.ProgramVertex; +import android.util.Log; + +/** + * @hide + */ +public class LightBase extends SceneGraphBase { + Transform mTransform; + Float3 mColor; + float mIntensity; + public LightBase() { + mColor = new Float3(0.0f, 0.0f, 0.0f); + mIntensity = 1.0f; + } + + public void setTransform(Transform t) { + mTransform = t; + } + + public void setColor(Float3 c) { + mColor = c; + } + + public void setIntensity(float i) { + mIntensity = i; + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/MatrixTransform.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/MatrixTransform.java new file mode 100644 index 0000000000000..61f8ccc6de451 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/MatrixTransform.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; + +import android.renderscript.Matrix4f; +import android.util.Log; + +/** + * @hide + */ +public class MatrixTransform extends Transform { + + Matrix4f mLocalMatrix; + public MatrixTransform() { + mLocalMatrix = new Matrix4f(); + } + + public void setMatrix(Matrix4f matrix) { + mLocalMatrix = matrix; + } + + void initLocalData() { + mTransformData = new ScriptField_SgTransform.Item(); + // "null" terminate the array + mTransformData.transformTypes[0] = RS_ID_NONE; + mTransformData.localMat = mLocalMatrix; + + mTransformData.isDirty = 1; + mTransformData.children = null; + mTransformData.name = getStringAsAllocation(mRS, getName()); + } + + public void updateRSData() { + mTransformData.localMat = mLocalMatrix; + mTransformData.isDirty = 1; + mField.set(mTransformData, 0, true); + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/PointLight.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/PointLight.java new file mode 100644 index 0000000000000..41a54c62a5f4c --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/PointLight.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; + +import android.renderscript.Matrix4f; +import android.renderscript.ProgramFragment; +import android.renderscript.ProgramStore; +import android.renderscript.ProgramVertex; +import android.util.Log; + +/** + * @hide + */ +public class PointLight extends LightBase { + public PointLight() { + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/RenderPass.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/RenderPass.java new file mode 100644 index 0000000000000..0012b10971883 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/RenderPass.java @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; + +import android.util.Log; + +import android.renderscript.*; +import android.content.res.Resources; + +/** + * @hide + */ +public class RenderPass extends SceneGraphBase { + + Allocation mColorTarget; + Float4 mClearColor; + boolean mShouldClearColor; + + Allocation mDepthTarget; + float mClearDepth; + boolean mShouldClearDepth; + + ArrayList mObjectsToDraw; + + Camera mCamera; + + ScriptField_RenderPass_s.Item mRsField; + + public RenderPass() { + mObjectsToDraw = new ArrayList(); + mClearColor = new Float4(0.0f, 0.0f, 0.0f, 0.0f); + mShouldClearColor = true; + mClearDepth = 1.0f; + mShouldClearDepth = true; + } + + public void appendDrawable(Drawable d) { + mObjectsToDraw.add(d); + } + + public void setCamera(Camera c) { + mCamera = c; + } + + public void setColorTarget(Allocation colorTarget) { + mColorTarget = colorTarget; + } + public void setClearColor(Float4 clearColor) { + mClearColor = clearColor; + } + public void setShouldClearColor(boolean shouldClearColor) { + mShouldClearColor = shouldClearColor; + } + + public void setDepthTarget(Allocation depthTarget) { + mDepthTarget = depthTarget; + } + public void setClearDepth(float clearDepth) { + mClearDepth = clearDepth; + } + public void setShouldClearDepth(boolean shouldClearDepth) { + mShouldClearDepth = shouldClearDepth; + } + + ScriptField_RenderPass_s.Item getRsField(RenderScriptGL rs, Resources res) { + if (mRsField != null) { + return mRsField; + } + + mRsField = new ScriptField_RenderPass_s.Item(); + mRsField.color_target = mColorTarget; + mRsField.depth_target = mDepthTarget; + mRsField.camera = mCamera != null ? mCamera.getRSData(rs).getAllocation() : null; + + if (mObjectsToDraw.size() != 0) { + Allocation drawableData = Allocation.createSized(rs, + Element.ALLOCATION(rs), + mObjectsToDraw.size()); + Allocation[] drawableAllocs = new Allocation[mObjectsToDraw.size()]; + for (int i = 0; i < mObjectsToDraw.size(); i ++) { + Drawable dI = (Drawable)mObjectsToDraw.get(i); + drawableAllocs[i] = dI.getRsField(rs, res).getAllocation(); + } + drawableData.copyFrom(drawableAllocs); + mRsField.objects = drawableData; + } + + mRsField.clear_color = mClearColor; + mRsField.clear_depth = mClearDepth; + mRsField.should_clear_color = mShouldClearColor; + mRsField.should_clear_depth = mShouldClearDepth; + return mRsField; + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/RenderState.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/RenderState.java new file mode 100644 index 0000000000000..e8aec957d5bf9 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/RenderState.java @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; + +import android.renderscript.Allocation; +import android.renderscript.Element; +import android.renderscript.Matrix4f; +import android.renderscript.ProgramFragment; +import android.renderscript.ProgramRaster; +import android.renderscript.ProgramStore; +import android.renderscript.ProgramVertex; +import android.renderscript.RSRuntimeException; +import android.renderscript.RenderScript; +import android.renderscript.RenderScriptGL; +import android.util.Log; + +/** + * @hide + */ +public class RenderState extends SceneGraphBase { + ProgramVertex mVertex; + ProgramFragment mFragment; + ProgramStore mStore; + ProgramRaster mRaster; + + ScriptField_RenderState_s mField; + + public RenderState(ProgramVertex pv, + ProgramFragment pf, + ProgramStore ps, + ProgramRaster pr) { + mVertex = pv; + mFragment = pf; + mStore = ps; + mRaster = pr; + } + + public RenderState(RenderState r) { + mVertex = r.mVertex; + mFragment = r.mFragment; + mStore = r.mStore; + mRaster = r.mRaster; + } + + public void setProgramVertex(ProgramVertex pv) { + mVertex = pv; + } + + public void setProgramFragment(ProgramFragment pf) { + mFragment = pf; + } + + public void setProgramStore(ProgramStore ps) { + mStore = ps; + } + + public void setProgramRaster(ProgramRaster pr) { + mRaster = pr; + } + + public ScriptField_RenderState_s getRSData(RenderScriptGL rs) { + if (mField != null) { + return mField; + } + + ScriptField_RenderState_s.Item item = new ScriptField_RenderState_s.Item(); + item.pv = mVertex; + item.pf = mFragment; + item.ps = mStore; + item.pr = mRaster; + + mField = new ScriptField_RenderState_s(rs, 1); + mField.set(item, 0, true); + return mField; + } +} diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Scene.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Scene.java new file mode 100644 index 0000000000000..b1ae365d5531f --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Scene.java @@ -0,0 +1,260 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import android.renderscript.RenderScriptGL; +import android.renderscript.Mesh; +import android.renderscript.*; +import android.content.res.Resources; +import android.util.Log; +import android.os.AsyncTask; + +/** + * @hide + */ +public class Scene extends SceneGraphBase { + private static String TIMER_TAG = "TIMER"; + + private class ImageLoaderTask extends AsyncTask { + protected Boolean doInBackground(String... names) { + long start = System.currentTimeMillis(); + for (int i = 0; i < mDrawables.size(); i ++) { + Drawable dI = (Drawable)mDrawables.get(i); + dI.updateTextures(mRS, mRes); + } + long end = System.currentTimeMillis(); + Log.v(TIMER_TAG, "Texture init time: " + (end - start)); + return new Boolean(true); + } + + protected void onPostExecute(Boolean result) { + } + } + + CompoundTransform mRootTransforms; + HashMap mTransformMap; + ArrayList mRenderPasses; + ArrayList mLights; + ArrayList mCameras; + ArrayList mDrawables; + HashMap mDrawableMap; + ArrayList mTextures; + + HashMap > mDrawableMeshMap; + + // RS Specific stuff + ScriptField_SgTransform mTransformRSData; + + RenderScriptGL mRS; + Resources mRes; + + ScriptField_RenderPass_s mRenderPassAlloc; + + public Scene() { + mRenderPasses = new ArrayList(); + mLights = new ArrayList(); + mCameras = new ArrayList(); + mDrawables = new ArrayList(); + mDrawableMap = new HashMap(); + mDrawableMeshMap = new HashMap >(); + mTextures = new ArrayList(); + mRootTransforms = new CompoundTransform(); + mRootTransforms.setName("_scene_root_"); + mTransformMap = new HashMap(); + } + + public void appendTransform(Transform t) { + mRootTransforms.appendChild(t); + } + + // temporary + public void addToTransformMap(Transform t) { + mTransformMap.put(t.getName(), t); + } + + public Transform getTransformByName(String name) { + return mTransformMap.get(name); + } + + public void appendRenderPass(RenderPass p) { + mRenderPasses.add(p); + } + + public void clearRenderPasses() { + mRenderPasses.clear(); + } + + public void appendLight(LightBase l) { + mLights.add(l); + } + + public void appendCamera(Camera c) { + mCameras.add(c); + } + + public ArrayList getCameras() { + return mCameras; + } + + public void appendDrawable(DrawableBase d) { + mDrawables.add(d); + mDrawableMap.put(d.getName(), d); + } + + public ArrayList getDrawables() { + return mDrawables; + } + + public DrawableBase getDrawableByName(String name) { + return mDrawableMap.get(name); + } + + public void appendTextures(Texture2D tex) { + mTextures.add(tex); + } + + public void assignRenderStateToMaterial(RenderState renderState, String regex) { + Pattern pattern = Pattern.compile(regex); + int numDrawables = mDrawables.size(); + for (int i = 0; i < numDrawables; i ++) { + Drawable shape = (Drawable)mDrawables.get(i); + Matcher m = pattern.matcher(shape.mMaterialName); + if (m.find()) { + shape.setRenderState(renderState); + } + } + } + + public void assignRenderState(RenderState renderState) { + int numDrawables = mDrawables.size(); + for (int i = 0; i < numDrawables; i ++) { + Drawable shape = (Drawable)mDrawables.get(i); + shape.setRenderState(renderState); + } + } + + public void meshLoaded(Mesh m) { + ArrayList entries = mDrawableMeshMap.get(m.getName()); + int numEntries = entries.size(); + for (int i = 0; i < numEntries; i++) { + Drawable d = entries.get(i); + d.resolveMeshData(m); + //mDrawablesField.set(d.getRsField(mRS, mRes), d.sceneIndex, true); + } + } + + void addToMeshMap(Drawable d) { + ArrayList entries = mDrawableMeshMap.get(d.mMeshName); + if (entries == null) { + entries = new ArrayList(); + mDrawableMeshMap.put(d.mMeshName, entries); + } + entries.add(d); + } + + public void destroyRS(SceneManager sceneManager) { + mTransformRSData = null; + sceneManager.mRenderLoop.bind_gRootNode(mTransformRSData); + sceneManager.mRenderLoop.set_gDrawableObjects(null); + mRenderPassAlloc = null; + sceneManager.mRenderLoop.set_gRenderPasses(null); + sceneManager.mRenderLoop.bind_gFrontToBack(null); + sceneManager.mRenderLoop.bind_gBackToFront(null); + sceneManager.mRenderLoop.set_gCameras(null); + + mTransformMap = null; + mRenderPasses = null; + mLights = null; + mCameras = null; + mDrawables = null; + mDrawableMap = null; + mTextures = null; + mDrawableMeshMap = null; + mRootTransforms = null; + } + + public void initRenderPassRS(RenderScriptGL rs, SceneManager sceneManager) { + if (mRenderPasses.size() != 0) { + mRenderPassAlloc = new ScriptField_RenderPass_s(mRS, mRenderPasses.size()); + for (int i = 0; i < mRenderPasses.size(); i ++) { + mRenderPassAlloc.set(mRenderPasses.get(i).getRsField(mRS, mRes), i, false); + } + mRenderPassAlloc.copyAll(); + sceneManager.mRenderLoop.set_gRenderPasses(mRenderPassAlloc.getAllocation()); + } + } + + public void initRS(RenderScriptGL rs, Resources res, SceneManager sceneManager) { + mRS = rs; + long start = System.currentTimeMillis(); + mTransformRSData = mRootTransforms.getRSData(rs); + long end = System.currentTimeMillis(); + Log.v(TIMER_TAG, "Transform init time: " + (end - start)); + + start = System.currentTimeMillis(); + + sceneManager.mRenderLoop.bind_gRootNode(mTransformRSData); + end = System.currentTimeMillis(); + Log.v(TIMER_TAG, "Script init time: " + (end - start)); + + start = System.currentTimeMillis(); + Allocation drawableData = Allocation.createSized(rs, + Element.ALLOCATION(rs), + mDrawables.size()); + Allocation[] drawableAllocs = new Allocation[mDrawables.size()]; + for (int i = 0; i < mDrawables.size(); i ++) { + Drawable dI = (Drawable)mDrawables.get(i); + dI.sceneIndex = i; + addToMeshMap(dI); + drawableAllocs[i] = dI.getRsField(rs, res).getAllocation(); + } + drawableData.copyFrom(drawableAllocs); + sceneManager.mRenderLoop.set_gDrawableObjects(drawableData); + + initRenderPassRS(rs, sceneManager); + + new ImageLoaderTask().execute(); + + end = System.currentTimeMillis(); + Log.v(TIMER_TAG, "Drawable init time: " + (end - start)); + + Allocation opaqueBuffer = Allocation.createSized(rs, Element.U32(rs), mDrawables.size()); + Allocation transparentBuffer = Allocation.createSized(rs, + Element.U32(rs), mDrawables.size()); + + sceneManager.mRenderLoop.bind_gFrontToBack(opaqueBuffer); + sceneManager.mRenderLoop.bind_gBackToFront(transparentBuffer); + + Allocation cameraData = Allocation.createSized(rs, Element.ALLOCATION(rs), mCameras.size()); + Allocation[] cameraAllocs = new Allocation[mCameras.size()]; + for (int i = 0; i < mCameras.size(); i ++) { + cameraAllocs[i] = mCameras.get(i).getRSData(rs).getAllocation(); + } + cameraData.copyFrom(cameraAllocs); + sceneManager.mRenderLoop.set_gCameras(cameraData); + } +} + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraph.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraph.java new file mode 100644 index 0000000000000..cfb91f4eba880 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraph.java @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import android.renderscript.RSSurfaceView; +import android.renderscript.RenderScript; + +import android.app.Activity; +import android.content.res.Configuration; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.provider.Settings.System; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.Window; +import android.widget.Button; +import android.widget.ListView; +import android.view.MenuInflater; +import android.view.Window; +import android.net.Uri; + +import java.lang.Runtime; + +public class SceneGraph extends Activity { + + private SceneGraphView mView; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + + // Create our Preview view and set it as the content of our + // Activity + mView = new SceneGraphView(this); + setContentView(mView); + } + + @Override + protected void onResume() { + // Ideally a game should implement onResume() and onPause() + // to take appropriate action when the activity looses focus + super.onResume(); + mView.resume(); + } + + @Override + protected void onPause() { + // Ideally a game should implement onResume() and onPause() + // to take appropriate action when the activity looses focus + super.onPause(); + mView.pause(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.loader_menu, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle item selection + switch (item.getItemId()) { + case R.id.load_model: + loadModel(); + return true; + case R.id.use_blur: + mView.mRender.toggleBlur(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + private static final int FIND_DAE_MODEL = 10; + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode == RESULT_OK) { + if (requestCode == FIND_DAE_MODEL) { + Uri selectedImageUri = data.getData(); + Log.e("Selected Path: ", selectedImageUri.getPath()); + mView.mRender.loadModel(selectedImageUri.getPath()); + } + } + } + + public void loadModel() { + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_PICK); + intent.setClassName("com.android.scenegraph", + "com.android.scenegraph.FileSelector"); + startActivityForResult(intent, FIND_DAE_MODEL); + } + +} + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraphBase.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraphBase.java new file mode 100644 index 0000000000000..f5fe7c83ef5f4 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraphBase.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; + +import android.renderscript.Allocation; +import android.renderscript.Element; +import android.renderscript.Matrix4f; +import android.renderscript.ProgramFragment; +import android.renderscript.ProgramStore; +import android.renderscript.ProgramVertex; +import android.renderscript.RenderScript; +import android.renderscript.RSRuntimeException; + +import android.util.Log; + +/** + * @hide + */ +public abstract class SceneGraphBase { + String mName; + public void setName(String n) { + mName = n; + } + + public String getName() { + return mName; + } + + Allocation getStringAsAllocation(RenderScript rs, String str) { + if (str == null) { + return null; + } + if (str.length() == 0) { + return null; + } + byte[] allocArray = null; + byte[] nullChar = new byte[1]; + nullChar[0] = 0; + try { + allocArray = str.getBytes("UTF-8"); + Allocation alloc = Allocation.createSized(rs, Element.U8(rs), + allocArray.length + 1, + Allocation.USAGE_SCRIPT); + alloc.copy1DRangeFrom(0, allocArray.length, allocArray); + alloc.copy1DRangeFrom(allocArray.length, 1, nullChar); + return alloc; + } + catch (Exception e) { + throw new RSRuntimeException("Could not convert string to utf-8."); + } + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraphRS.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraphRS.java new file mode 100644 index 0000000000000..04b4cd894a5a7 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraphRS.java @@ -0,0 +1,629 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.FileInputStream; +import java.io.BufferedInputStream; +import java.io.Writer; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Vector; + +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.AsyncTask; +import android.renderscript.*; +import android.renderscript.Allocation.MipmapControl; +import android.renderscript.Element.Builder; +import android.renderscript.Font.Style; +import android.renderscript.Program.TextureType; +import android.renderscript.ProgramStore.DepthFunc; +import android.util.Log; + +import com.android.scenegraph.SceneManager.SceneLoadedCallback; + +public class SceneGraphRS { + + private static String modelName = "orientation_test"; + private static String TAG = "SceneGraphRS"; + private final int STATE_LAST_FOCUS = 1; + private final boolean mLoadFromSD = true; + private static String mSDCardPath = "sdcard/scenegraph/"; + + int mWidth; + int mHeight; + int mRotation; + + boolean mUseBlur; + + SceneLoadedCallback mLoadedCallback = new SceneLoadedCallback() { + public void run() { + prepareToRender(mLoadedScene); + } + }; + + SceneManager mSceneManager; + + TouchHandler mTouchHandler; + + public SceneGraphRS() { + mUseBlur = false; + } + + void toggleBlur() { + mUseBlur = !mUseBlur; + + mActiveScene.clearRenderPasses(); + initRenderPasses(); + mActiveScene.initRenderPassRS(mRS, mSceneManager); + Drawable plane = (Drawable)mActiveScene.getDrawableByName("pPlaneShape1"); + if (plane != null) { + plane.setVisible(mRS, !mUseBlur); + } + } + + public void init(RenderScriptGL rs, Resources res, int width, int height) { + mRS = rs; + mRes = res; + mWidth = width; + mHeight = height; + mRotation = 0; + + mTouchHandler = new TouchHandler(); + + mSceneManager = new SceneManager(); + mSceneManager.initRS(mRS, mRes, mWidth, mHeight); + + renderLoading(); + + new LoadingScreenLoaderTask().execute(); + + initRS(); + + mSceneManager.loadModel(modelName, mLoadedCallback); + } + + void loadModel(String path) { + String shortName = path.substring(path.lastIndexOf('/') + 1); + shortName = shortName.substring(0, shortName.lastIndexOf('.')); + mScript.set_gInitialized(false); + mActiveScene.destroyRS(mSceneManager); + mSceneManager.loadModel(shortName, mLoadedCallback); + } + + private Resources mRes; + private RenderScriptGL mRS; + private Sampler mSampler; + private ProgramStore mPSBackground; + private ProgramFragment mPFBackground; + private ProgramVertex mPVBackground; + private ProgramVertexFixedFunction.Constants mPVA; + + private ProgramFragment mPF_Paint; + private ProgramFragment mPF_Aluminum; + private ProgramFragment mPF_Plastic; + private ProgramFragment mPF_Diffuse; + private ProgramFragment mPF_BlurH; + private ProgramFragment mPF_BlurV; + private ProgramFragment mPF_SelectColor; + private ProgramFragment mPF_Texture; + ScriptField_FShaderParams_s mFsConst; + ScriptField_FBlurOffsets_s mFsBlurHConst; + ScriptField_FBlurOffsets_s mFsBlurVConst; + private ProgramVertex mPV_Paint; + ScriptField_VShaderParams_s mVsConst; + private ProgramVertex mPV_Blur; + + private Allocation mDefaultCube; + private Allocation mAllocPV; + private Allocation mEnvCube; + private Allocation mDiffCube; + + private Allocation mRenderTargetBlur0Color; + private Allocation mRenderTargetBlur0Depth; + private Allocation mRenderTargetBlur1Color; + private Allocation mRenderTargetBlur1Depth; + private Allocation mRenderTargetBlur2Color; + private Allocation mRenderTargetBlur2Depth; + + Scene mActiveScene; + + private ScriptC_scenegraph mScript; + + private class LoadingScreenLoaderTask extends AsyncTask { + Allocation robotTex; + Mesh robotMesh; + protected Boolean doInBackground(String... names) { + long start = System.currentTimeMillis(); + robotTex = Allocation.createFromBitmapResource(mRS, mRes, R.drawable.robot, + MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, + Allocation.USAGE_GRAPHICS_TEXTURE); + + FileA3D model = FileA3D.createFromResource(mRS, mRes, R.raw.robot); + FileA3D.IndexEntry entry = model.getIndexEntry(0); + if (entry != null && entry.getEntryType() == FileA3D.EntryType.MESH) { + robotMesh = entry.getMesh(); + } + + initPFS(); + initPF(); + initPV(); + + long end = System.currentTimeMillis(); + Log.v("TIMER", "Loading load time: " + (end - start)); + return new Boolean(true); + } + + protected void onPostExecute(Boolean result) { + mScript.set_gRobotTex(robotTex); + mScript.set_gRobotMesh(robotMesh); + } + } + + + private class ImageLoaderTask extends AsyncTask { + Allocation tempEnv; + Allocation tempDiff; + + InputStream openStream(String name) { + InputStream is = null; + try { + if (!mLoadFromSD) { + is = mRes.getAssets().open(name); + } else { + File f = new File(mSDCardPath + name); + is = new BufferedInputStream(new FileInputStream(f)); + } + } catch (IOException e) { + Log.e("PAINTSHADERS", " Message: " + e.getMessage()); + } + return is; + } + + protected Boolean doInBackground(String... names) { + long start = System.currentTimeMillis(); + InputStream is = openStream("cube_env.png"); + if (is == null) { + return new Boolean(false); + } + + Bitmap b = BitmapFactory.decodeStream(is); + tempEnv = Allocation.createCubemapFromBitmap(mRS, + b, + MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, + Allocation.USAGE_GRAPHICS_TEXTURE); + + is = openStream("cube_spec.png"); + if (is == null) { + return new Boolean(false); + } + + b = BitmapFactory.decodeStream(is); + tempDiff = Allocation.createCubemapFromBitmap(mRS, + b, + MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, + Allocation.USAGE_GRAPHICS_TEXTURE); + long end = System.currentTimeMillis(); + Log.v("TIMER", "Image load time: " + (end - start)); + return new Boolean(true); + } + + protected void onPostExecute(Boolean result) { + mEnvCube = tempEnv; + mDiffCube = tempDiff; + + mPF_Paint.bindTexture(mEnvCube, 1); + mPF_Aluminum.bindTexture(mDiffCube, 1); + } + } + + public void onActionDown(float x, float y) { + mTouchHandler.onActionDown(x, y); + + //mSceneManager.getRenderLoop().invoke_pick((int)x, (int)y); + } + + public void onActionScale(float scale) { + mTouchHandler.onActionScale(scale); + } + + public void onActionMove(float x, float y) { + mTouchHandler.onActionMove(x, y); + } + + private void initPaintShaders() { + ProgramVertex.Builder vb = new ProgramVertex.Builder(mRS); + mVsConst = new ScriptField_VShaderParams_s(mRS, 1); + vb.addConstant(mVsConst.getAllocation().getType()); + vb.addInput(ScriptField_VertexShaderInputs_s.createElement(mRS)); + vb.setShader(mRes, R.raw.shader2v); + mPV_Paint = vb.create(); + mPV_Paint.bindConstants(mVsConst.getAllocation(), 0); + + vb = new ProgramVertex.Builder(mRS); + vb.addConstant(mVsConst.getAllocation().getType()); + vb.addInput(ScriptField_VertexShaderInputs_s.createElement(mRS)); + vb.setShader(mRes, R.raw.blur_vertex); + mPV_Blur = vb.create(); + mPV_Blur.bindConstants(mVsConst.getAllocation(), 0); + + ProgramFragment.Builder fb = new ProgramFragment.Builder(mRS); + mFsConst = new ScriptField_FShaderParams_s(mRS, 1); + fb.addConstant(mFsConst.getAllocation().getType()); + fb.setShader(mRes, R.raw.paintf); + fb.addTexture(TextureType.TEXTURE_2D); + fb.addTexture(TextureType.TEXTURE_CUBE); + mPF_Paint = fb.create(); + + mPF_Paint.bindConstants(mFsConst.getAllocation(), 0); + mPF_Paint.bindSampler(Sampler.WRAP_LINEAR_MIP_LINEAR(mRS), 0); + mPF_Paint.bindSampler(Sampler.CLAMP_LINEAR_MIP_LINEAR(mRS), 1); + + fb = new ProgramFragment.Builder(mRS); + fb.addConstant(mFsConst.getAllocation().getType()); + fb.setShader(mRes, R.raw.metal); + fb.addTexture(TextureType.TEXTURE_2D); + fb.addTexture(TextureType.TEXTURE_CUBE); + mPF_Aluminum = fb.create(); + + mPF_Aluminum.bindConstants(mFsConst.getAllocation(), 0); + mPF_Aluminum.bindSampler(Sampler.WRAP_LINEAR_MIP_LINEAR(mRS), 0); + mPF_Aluminum.bindSampler(Sampler.CLAMP_LINEAR_MIP_LINEAR(mRS), 1); + + fb = new ProgramFragment.Builder(mRS); + fb.addConstant(mFsConst.getAllocation().getType()); + fb.setShader(mRes, R.raw.plastic); + fb.addTexture(TextureType.TEXTURE_2D); + mPF_Plastic = fb.create(); + mPF_Plastic.bindConstants(mFsConst.getAllocation(), 0); + mPF_Plastic.bindSampler(Sampler.WRAP_LINEAR_MIP_LINEAR(mRS), 0); + + fb = new ProgramFragment.Builder(mRS); + fb.addConstant(mFsConst.getAllocation().getType()); + fb.setShader(mRes, R.raw.diffuse); + fb.addTexture(TextureType.TEXTURE_2D); + mPF_Diffuse = fb.create(); + mPF_Diffuse.bindConstants(mFsConst.getAllocation(), 0); + mPF_Diffuse.bindSampler(Sampler.WRAP_LINEAR_MIP_LINEAR(mRS), 0); + + fb = new ProgramFragment.Builder(mRS); + fb.addConstant(mFsConst.getAllocation().getType()); + fb.setShader(mRes, R.raw.texture); + fb.addTexture(TextureType.TEXTURE_2D); + mPF_Texture = fb.create(); + mPF_Texture.bindConstants(mFsConst.getAllocation(), 0); + mPF_Texture.bindSampler(Sampler.WRAP_LINEAR_MIP_LINEAR(mRS), 0); + + mFsBlurHConst = new ScriptField_FBlurOffsets_s(mRS, 1); + float xAdvance = 1.0f / (float)mRenderTargetBlur0Color.getType().getX(); + ScriptField_FBlurOffsets_s.Item item = new ScriptField_FBlurOffsets_s.Item(); + item.blurOffset0 = - xAdvance * 2.5f; + item.blurOffset1 = - xAdvance * 0.5f; + item.blurOffset2 = xAdvance * 1.5f; + item.blurOffset3 = xAdvance * 3.5f; + mFsBlurHConst.set(item, 0, true); + + fb = new ProgramFragment.Builder(mRS); + fb.addConstant(mFsBlurHConst.getAllocation().getType()); + fb.setShader(mRes, R.raw.blur_h); + fb.addTexture(TextureType.TEXTURE_2D); + mPF_BlurH = fb.create(); + mPF_BlurH.bindConstants(mFsBlurHConst.getAllocation(), 0); + mPF_BlurH.bindTexture(mRenderTargetBlur0Color, 0); + mPF_BlurH.bindSampler(Sampler.CLAMP_LINEAR(mRS), 0); + + mFsBlurVConst = new ScriptField_FBlurOffsets_s(mRS, 1); + float yAdvance = 1.0f / (float)mRenderTargetBlur0Color.getType().getY(); + item.blurOffset0 = - yAdvance * 2.5f; + item.blurOffset1 = - yAdvance * 0.5f; + item.blurOffset2 = yAdvance * 1.5f; + item.blurOffset3 = yAdvance * 3.5f; + mFsBlurVConst.set(item, 0, true); + + fb = new ProgramFragment.Builder(mRS); + fb.addConstant(mFsBlurVConst.getAllocation().getType()); + fb.setShader(mRes, R.raw.blur_v); + fb.addTexture(TextureType.TEXTURE_2D); + mPF_BlurV = fb.create(); + mPF_BlurV.bindConstants(mFsBlurVConst.getAllocation(), 0); + mPF_BlurV.bindTexture(mRenderTargetBlur1Color, 0); + mPF_BlurV.bindSampler(Sampler.CLAMP_LINEAR(mRS), 0); + + fb = new ProgramFragment.Builder(mRS); + //fb.addConstant(mFsBlurVConst.getAllocation().getType()); + fb.setShader(mRes, R.raw.select_color); + fb.addTexture(TextureType.TEXTURE_2D); + mPF_SelectColor = fb.create(); + //mPF_SelectColor.bindConstants(mFsBlurVConst.getAllocation(), 0); + //mPF_SelectColor.bindTexture(mRenderTargetBlur1Color, 0); + mPF_SelectColor.bindSampler(Sampler.CLAMP_LINEAR(mRS), 0); + } + + private void initPFS() { + ProgramStore.Builder b = new ProgramStore.Builder(mRS); + + b.setDepthFunc(ProgramStore.DepthFunc.LESS); + b.setDitherEnabled(false); + b.setDepthMaskEnabled(true); + mPSBackground = b.create(); + + mScript.set_gPFSBackground(mPSBackground); + } + + private void initPF() { + Sampler.Builder bs = new Sampler.Builder(mRS); + bs.setMinification(Sampler.Value.LINEAR); + bs.setMagnification(Sampler.Value.LINEAR); + bs.setWrapS(Sampler.Value.CLAMP); + bs.setWrapT(Sampler.Value.CLAMP); + mSampler = bs.create(); + + ProgramFragmentFixedFunction.Builder b = new ProgramFragmentFixedFunction.Builder(mRS); + b.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE, + ProgramFragmentFixedFunction.Builder.Format.RGBA, 0); + mPFBackground = b.create(); + mPFBackground.bindSampler(Sampler.CLAMP_LINEAR(mRS), 0); + + mScript.set_gPFBackground(mPFBackground); + } + + private void initPV() { + ProgramVertexFixedFunction.Builder pvb = new ProgramVertexFixedFunction.Builder(mRS); + mPVBackground = pvb.create(); + + mPVA = new ProgramVertexFixedFunction.Constants(mRS); + ((ProgramVertexFixedFunction)mPVBackground).bindConstants(mPVA); + + mScript.set_gPVBackground(mPVBackground); + } + + void renderLoading() { + mScript = new ScriptC_scenegraph(mRS, mRes, R.raw.scenegraph); + mRS.bindRootScript(mScript); + } + + void initSceneRS() { + + } + + void createRenderTargets() { + Type.Builder b = new Type.Builder(mRS, Element.RGBA_8888(mRS)); + b.setX(mWidth/8).setY(mHeight/8); + Type renderType = b.create(); + mRenderTargetBlur0Color = Allocation.createTyped(mRS, renderType, + Allocation.USAGE_GRAPHICS_TEXTURE | + Allocation.USAGE_GRAPHICS_RENDER_TARGET); + mRenderTargetBlur1Color = Allocation.createTyped(mRS, renderType, + Allocation.USAGE_GRAPHICS_TEXTURE | + Allocation.USAGE_GRAPHICS_RENDER_TARGET); + mRenderTargetBlur2Color = Allocation.createTyped(mRS, renderType, + Allocation.USAGE_GRAPHICS_TEXTURE | + Allocation.USAGE_GRAPHICS_RENDER_TARGET); + + b = new Type.Builder(mRS, + Element.createPixel(mRS, Element.DataType.UNSIGNED_16, + Element.DataKind.PIXEL_DEPTH)); + b.setX(mWidth/8).setY(mHeight/8); + mRenderTargetBlur0Depth = Allocation.createTyped(mRS, + b.create(), + Allocation.USAGE_GRAPHICS_RENDER_TARGET); + + mRenderTargetBlur1Depth = Allocation.createTyped(mRS, + b.create(), + Allocation.USAGE_GRAPHICS_RENDER_TARGET); + mRenderTargetBlur2Depth = Allocation.createTyped(mRS, + b.create(), + Allocation.USAGE_GRAPHICS_RENDER_TARGET); + } + + ProgramStore BLEND_ADD_DEPTH_NONE(RenderScript rs) { + ProgramStore.Builder builder = new ProgramStore.Builder(rs); + builder.setDepthFunc(ProgramStore.DepthFunc.ALWAYS); + builder.setBlendFunc(ProgramStore.BlendSrcFunc.ONE, ProgramStore.BlendDstFunc.ONE); + builder.setDitherEnabled(false); + builder.setDepthMaskEnabled(false); + return builder.create(); + } + + Drawable getDrawableQuad(String name, RenderState state) { + Drawable quad = new Drawable(); + quad.setTransform(new MatrixTransform()); + quad.setMesh(mSceneManager.getScreenAlignedQuad()); + quad.setName(name); + quad.setRenderState(state); + quad.setCullType(1); + return quad; + } + + void addBlurPasses() { + ArrayList allDraw = mActiveScene.getDrawables(); + int numDraw = allDraw.size(); + + RenderState drawTex = new RenderState(mPV_Blur, mPF_Texture, + BLEND_ADD_DEPTH_NONE(mRS), + ProgramRaster.CULL_NONE(mRS)); + + RenderState selectCol = new RenderState(mPV_Blur, mPF_SelectColor, + ProgramStore.BLEND_NONE_DEPTH_NONE(mRS), + ProgramRaster.CULL_NONE(mRS)); + + RenderState hBlur = new RenderState(mPV_Blur, mPF_BlurH, + ProgramStore.BLEND_NONE_DEPTH_NONE(mRS), + ProgramRaster.CULL_NONE(mRS)); + + RenderState vBlur = new RenderState(mPV_Blur, mPF_BlurV, + ProgramStore.BLEND_NONE_DEPTH_NONE(mRS), + ProgramRaster.CULL_NONE(mRS)); + + RenderPass blurSourcePass = new RenderPass(); + blurSourcePass.setColorTarget(mRenderTargetBlur0Color); + blurSourcePass.setDepthTarget(mRenderTargetBlur0Depth); + blurSourcePass.setClearColor(new Float4(1.0f, 1.0f, 1.0f, 1.0f)); + blurSourcePass.setShouldClearColor(true); + blurSourcePass.setClearDepth(1.0f); + blurSourcePass.setShouldClearDepth(true); + blurSourcePass.setCamera(mActiveScene.getCameras().get(1)); + for (int i = 0; i < numDraw; i ++) { + blurSourcePass.appendDrawable((Drawable)allDraw.get(i)); + } + mActiveScene.appendRenderPass(blurSourcePass); + + RenderPass selectColorPass = new RenderPass(); + selectColorPass.setColorTarget(mRenderTargetBlur2Color); + selectColorPass.setDepthTarget(mRenderTargetBlur2Depth); + selectColorPass.setShouldClearColor(false); + selectColorPass.setShouldClearDepth(false); + selectColorPass.setCamera(mActiveScene.getCameras().get(1)); + // Make blur shape + Drawable quad = getDrawableQuad("ScreenAlignedQuadS", selectCol); + quad.updateTextures(mRS, mRenderTargetBlur0Color, 0); + selectColorPass.appendDrawable(quad); + mActiveScene.appendRenderPass(selectColorPass); + + RenderPass horizontalBlurPass = new RenderPass(); + horizontalBlurPass.setColorTarget(mRenderTargetBlur1Color); + horizontalBlurPass.setDepthTarget(mRenderTargetBlur1Depth); + horizontalBlurPass.setShouldClearColor(false); + horizontalBlurPass.setShouldClearDepth(false); + horizontalBlurPass.setCamera(mActiveScene.getCameras().get(1)); + // Make blur shape + quad = getDrawableQuad("ScreenAlignedQuadH", hBlur); + quad.updateTextures(mRS, mRenderTargetBlur2Color, 0); + horizontalBlurPass.appendDrawable(quad); + mActiveScene.appendRenderPass(horizontalBlurPass); + + RenderPass verticalBlurPass = new RenderPass(); + verticalBlurPass.setColorTarget(mRenderTargetBlur2Color); + verticalBlurPass.setDepthTarget(mRenderTargetBlur2Depth); + verticalBlurPass.setShouldClearColor(false); + verticalBlurPass.setShouldClearDepth(false); + verticalBlurPass.setCamera(mActiveScene.getCameras().get(1)); + // Make blur shape + quad = getDrawableQuad("ScreenAlignedQuadV", vBlur); + quad.updateTextures(mRS, mRenderTargetBlur1Color, 0); + verticalBlurPass.appendDrawable(quad); + mActiveScene.appendRenderPass(verticalBlurPass); + + } + + void initRenderPasses() { + ArrayList allDraw = mActiveScene.getDrawables(); + int numDraw = allDraw.size(); + + if (mUseBlur) { + addBlurPasses(); + } + + RenderPass mainPass = new RenderPass(); + mainPass.setClearColor(new Float4(1.0f, 1.0f, 1.0f, 1.0f)); + mainPass.setShouldClearColor(true); + mainPass.setClearDepth(1.0f); + mainPass.setShouldClearDepth(true); + mainPass.setCamera(mActiveScene.getCameras().get(1)); + for (int i = 0; i < numDraw; i ++) { + mainPass.appendDrawable((Drawable)allDraw.get(i)); + } + mActiveScene.appendRenderPass(mainPass); + + if (mUseBlur) { + RenderState drawTex = new RenderState(mPV_Blur, mPF_Texture, + BLEND_ADD_DEPTH_NONE(mRS), + ProgramRaster.CULL_NONE(mRS)); + + RenderPass compositePass = new RenderPass(); + compositePass.setClearColor(new Float4(1.0f, 1.0f, 1.0f, 0.0f)); + compositePass.setShouldClearColor(false); + compositePass.setClearDepth(1.0f); + compositePass.setShouldClearDepth(false); + compositePass.setCamera(mActiveScene.getCameras().get(1)); + Drawable quad = getDrawableQuad("ScreenAlignedQuad", drawTex); + quad.updateTextures(mRS, mRenderTargetBlur2Color, 0); + compositePass.appendDrawable(quad); + + mActiveScene.appendRenderPass(compositePass); + } + } + + public void prepareToRender(Scene s) { + mActiveScene = s; + RenderState plastic = new RenderState(mPV_Paint, mPF_Plastic, null, null); + RenderState diffuse = new RenderState(mPV_Paint, mPF_Diffuse, null, null); + RenderState paint = new RenderState(mPV_Paint, mPF_Paint, null, null); + RenderState aluminum = new RenderState(mPV_Paint, mPF_Aluminum, null, null); + RenderState glassTransp = new RenderState(mPV_Paint, + mPF_Paint, + ProgramStore.BLEND_ALPHA_DEPTH_TEST(mRS), + null); + + initRenderPasses(); + + mActiveScene.assignRenderState(plastic); + + mActiveScene.assignRenderStateToMaterial(diffuse, "lambert2$"); + + mActiveScene.assignRenderStateToMaterial(paint, "^#Paint"); + mActiveScene.assignRenderStateToMaterial(paint, "^#Carbon"); + mActiveScene.assignRenderStateToMaterial(paint, "^#Glass"); + mActiveScene.assignRenderStateToMaterial(paint, "^#MainGlass"); + + mActiveScene.assignRenderStateToMaterial(aluminum, "^#Metal"); + mActiveScene.assignRenderStateToMaterial(aluminum, "^#Brake"); + + mActiveScene.assignRenderStateToMaterial(glassTransp, "^#GlassLight"); + + Drawable plane = (Drawable)mActiveScene.getDrawableByName("pPlaneShape1"); + if (plane != null) { + RenderState texState = new RenderState(mPV_Paint, mPF_Texture, null, null); + plane.setRenderState(texState); + plane.setVisible(mRS, !mUseBlur); + } + + mTouchHandler.init(mActiveScene); + + long start = System.currentTimeMillis(); + mActiveScene.initRS(mRS, mRes, mSceneManager); + long end = System.currentTimeMillis(); + Log.v("TIMER", "Scene init time: " + (end - start)); + + mScript.set_gInitialized(true); + } + + private void initRS() { + + createRenderTargets(); + initPaintShaders(); + new ImageLoaderTask().execute(); + + Bitmap b = BitmapFactory.decodeResource(mRes, R.drawable.defaultcube); + mDefaultCube = Allocation.createCubemapFromBitmap(mRS, b); + mPF_Paint.bindTexture(mDefaultCube, 1); + mPF_Aluminum.bindTexture(mDefaultCube, 1); + + ScriptC_render renderLoop = mSceneManager.getRenderLoop(); + renderLoop.bind_vConst(mVsConst); + renderLoop.bind_fConst(mFsConst); + + mScript.set_gRenderLoop(renderLoop); + Allocation dummyAlloc = Allocation.createSized(mRS, Element.I32(mRS), 1); + mScript.set_gDummyAlloc(dummyAlloc); + } +} diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraphView.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraphView.java new file mode 100644 index 0000000000000..0f2850176f889 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneGraphView.java @@ -0,0 +1,152 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.io.Writer; +import java.util.ArrayList; +import java.util.concurrent.Semaphore; + +import android.renderscript.RSSurfaceView; +import android.renderscript.RenderScript; +import android.renderscript.RenderScriptGL; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.os.Handler; +import android.os.Message; +import android.util.AttributeSet; +import android.util.Log; +import android.view.Surface; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.ScaleGestureDetector; + +public class SceneGraphView extends RSSurfaceView { + + public SceneGraphView(Context context) { + super(context); + mScaleDetector = new ScaleGestureDetector(context, new ScaleListener()); + } + + private RenderScriptGL mRS; + SceneGraphRS mRender; + + private ScaleGestureDetector mScaleDetector; + private static final int INVALID_POINTER_ID = -1; + private int mActivePointerId = INVALID_POINTER_ID; + + public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { + super.surfaceChanged(holder, format, w, h); + if (mRS == null) { + RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig(); + sc.setDepth(16, 24); + mRS = createRenderScriptGL(sc); + mRS.setSurface(holder, w, h); + mRender = new SceneGraphRS(); + mRender.init(mRS, getResources(), w, h); + } + } + + @Override + protected void onDetachedFromWindow() { + if (mRS != null) { + mRender = null; + mRS = null; + destroyRenderScriptGL(); + } + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) + { + // break point at here + // this method doesn't work when 'extends View' include 'extends ScrollView'. + return super.onKeyDown(keyCode, event); + } + + + @Override + public boolean onTouchEvent(MotionEvent ev) { + mScaleDetector.onTouchEvent(ev); + + boolean ret = false; + float x = ev.getX(); + float y = ev.getY(); + + final int action = ev.getAction(); + + switch (action & MotionEvent.ACTION_MASK) { + case MotionEvent.ACTION_DOWN: { + mRender.onActionDown(x, y); + mActivePointerId = ev.getPointerId(0); + ret = true; + break; + } + case MotionEvent.ACTION_MOVE: { + if (!mScaleDetector.isInProgress()) { + mRender.onActionMove(x, y); + } + mRender.onActionDown(x, y); + ret = true; + break; + } + + case MotionEvent.ACTION_UP: { + mActivePointerId = INVALID_POINTER_ID; + break; + } + + case MotionEvent.ACTION_CANCEL: { + mActivePointerId = INVALID_POINTER_ID; + break; + } + + case MotionEvent.ACTION_POINTER_UP: { + final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) + >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; + final int pointerId = ev.getPointerId(pointerIndex); + if (pointerId == mActivePointerId) { + // This was our active pointer going up. Choose a new + // active pointer and adjust accordingly. + final int newPointerIndex = pointerIndex == 0 ? 1 : 0; + x = ev.getX(newPointerIndex); + y = ev.getY(newPointerIndex); + mRender.onActionDown(x, y); + mActivePointerId = ev.getPointerId(newPointerIndex); + } + break; + } + } + + return ret; + } + + private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { + @Override + public boolean onScale(ScaleGestureDetector detector) { + mRender.onActionScale(detector.getScaleFactor()); + return true; + } + } +} + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneManager.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneManager.java new file mode 100644 index 0000000000000..3bb49f306edb1 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneManager.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import android.renderscript.RenderScriptGL; +import android.renderscript.Mesh; +import android.renderscript.*; +import android.renderscript.Allocation.MipmapControl; +import android.content.res.Resources; +import android.view.SurfaceHolder; +import android.util.Log; +import android.os.AsyncTask; + +/** + * @hide + */ +public class SceneManager extends SceneGraphBase { + + ScriptC_render mRenderLoop; + ScriptC_camera mCameraScript; + ScriptC_transform mTransformScript; + + RenderScriptGL mRS; + Resources mRes; + Mesh mQuad; + int mWidth; + int mHeight; + + public static class SceneLoadedCallback implements Runnable { + Scene mLoadedScene; + String mName; + public void run() { + } + } + + private void initPFS() { + ProgramStore.Builder b = new ProgramStore.Builder(mRS); + + b.setDepthFunc(ProgramStore.DepthFunc.LESS); + b.setDitherEnabled(false); + b.setDepthMaskEnabled(true); + + mRenderLoop.set_gPFSBackground(b.create()); + } + + public SceneManager() { + } + + public void loadModel(String name, SceneLoadedCallback cb) { + ColladaScene scene = new ColladaScene(name, cb); + scene.init(mRS, mRes); + } + + public Mesh getScreenAlignedQuad() { + if (mQuad != null) { + return mQuad; + } + + Mesh.TriangleMeshBuilder tmb = new Mesh.TriangleMeshBuilder(mRS, + 3, Mesh.TriangleMeshBuilder.TEXTURE_0); + + tmb.setTexture(0.0f, 1.0f); + tmb.addVertex(-1.0f, 1.0f, 1.0f); + + tmb.setTexture(0.0f, 0.0f); + tmb.addVertex(-1.0f, -1.0f, 1.0f); + + tmb.setTexture(1.0f, 0.0f); + tmb.addVertex(1.0f, -1.0f, 1.0f); + + tmb.setTexture(1.0f, 1.0f); + tmb.addVertex(1.0f, 1.0f, 1.0f); + + tmb.addTriangle(0, 1, 2); + tmb.addTriangle(2, 3, 0); + + mQuad = tmb.create(true); + return mQuad; + } + + public void initRS(RenderScriptGL rs, Resources res, int w, int h) { + mRS = rs; + mRes = res; + mTransformScript = new ScriptC_transform(rs, res, R.raw.transform); + mTransformScript.set_gTransformScript(mTransformScript); + + mCameraScript = new ScriptC_camera(rs, res, R.raw.camera); + + mRenderLoop = new ScriptC_render(rs, res, R.raw.render); + mRenderLoop.set_gTransformScript(mTransformScript); + mRenderLoop.set_gCameraScript(mCameraScript); + + Allocation checker = Allocation.createFromBitmapResource(mRS, mRes, R.drawable.checker, + MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, + Allocation.USAGE_GRAPHICS_TEXTURE); + mRenderLoop.set_gTGrid(checker); + initPFS(); + } + + public ScriptC_render getRenderLoop() { + return mRenderLoop; + } +} + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ShaderParam.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ShaderParam.java new file mode 100644 index 0000000000000..22cd1ce2823c7 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ShaderParam.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; + +import android.renderscript.Matrix4f; +import android.renderscript.ProgramFragment; +import android.renderscript.ProgramStore; +import android.renderscript.ProgramVertex; +import android.renderscript.Element; +import android.util.Log; + +/** + * @hide + */ +public class ShaderParam extends SceneGraphBase { + String mParamName; + + public ShaderParam(String name) { + mParamName = name; + } + + public String getParamName() { + return mParamName; + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Texture2D.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Texture2D.java new file mode 100644 index 0000000000000..fdab99940ceef --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Texture2D.java @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.FileInputStream; +import java.io.BufferedInputStream; +import java.lang.Math; +import java.net.URL; +import java.util.ArrayList; + +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.renderscript.*; +import android.renderscript.Allocation.MipmapControl; +import android.renderscript.Matrix4f; +import android.renderscript.Type.Builder; +import android.util.Log; + +/** + * @hide + */ +public class Texture2D extends SceneGraphBase { + private static String mSDCardPath = "sdcard/scenegraph/"; + private final boolean mLoadFromSD = true; + + String mFileName; + Allocation mRsTexture; + + public Texture2D() { + } + + public void setFileName(String file) { + mFileName = file; + } + + public String getFileName() { + return mFileName; + } + + Allocation getRsData(RenderScriptGL rs, Resources res) { + if (mRsTexture != null) { + return mRsTexture; + } + + String shortName = mFileName.substring(mFileName.lastIndexOf('/') + 1); + InputStream is = null; + try { + if (!mLoadFromSD) { + is = res.getAssets().open(shortName); + } else { + File f = new File(mSDCardPath + shortName); + is = new BufferedInputStream(new FileInputStream(f)); + } + } catch (IOException e) { + Log.e("Texture2D", + "Could not open image file " + shortName + " Message: " + e.getMessage()); + return null; + } + + Bitmap b = BitmapFactory.decodeStream(is); + mRsTexture = Allocation.createFromBitmap(rs, b, + Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, + Allocation.USAGE_GRAPHICS_TEXTURE); + return mRsTexture; + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TextureParam.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TextureParam.java new file mode 100644 index 0000000000000..0959d124aaf98 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TextureParam.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; + +import android.graphics.Camera; +import android.renderscript.Float4; +import android.renderscript.Matrix4f; +import android.renderscript.ProgramFragment; +import android.renderscript.ProgramStore; +import android.renderscript.ProgramVertex; +import android.renderscript.Element; +import android.util.Log; + +/** + * @hide + */ +public class TextureParam extends ShaderParam { + + Texture2D mTexture; + + public TextureParam(String name) { + super(name); + } + + public void setTexture(Texture2D t) { + mTexture = t; + } + + public Texture2D getTexture() { + return mTexture; + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TouchHandler.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TouchHandler.java new file mode 100644 index 0000000000000..eacc3d0f493dc --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TouchHandler.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.FileInputStream; +import java.io.BufferedInputStream; +import java.io.Writer; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Vector; + +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.AsyncTask; +import android.renderscript.*; +import android.renderscript.Allocation.MipmapControl; +import android.renderscript.Element.Builder; +import android.renderscript.Font.Style; +import android.renderscript.Program.TextureType; +import android.renderscript.ProgramStore.DepthFunc; +import android.util.Log; + +import com.android.scenegraph.SceneManager.SceneLoadedCallback; + +public class TouchHandler { + + private static String TAG = "TouchHandler"; + + public TouchHandler() { + } + + public void init(Scene scene) { + mCameraRotate = (CompoundTransform)scene.getTransformByName("CameraAim"); + mCameraDist = (CompoundTransform)scene.getTransformByName("CameraDist"); + + if (mCameraRotate != null && mCameraDist != null) { + mRotateX = mCameraRotate.mTransformComponents.get(2); + mRotateY = mCameraRotate.mTransformComponents.get(1); + mDist = mCameraDist.mTransformComponents.get(0); + } + } + + + private Resources mRes; + private RenderScriptGL mRS; + + float mLastX; + float mLastY; + + CompoundTransform mCameraRotate; + CompoundTransform mCameraDist; + + CompoundTransform.Component mRotateX; + CompoundTransform.Component mRotateY; + CompoundTransform.Component mDist; + + public void onActionDown(float x, float y) { + mLastX = x; + mLastY = y; + } + + public void onActionScale(float scale) { + if (mCameraDist == null) { + return; + } + mDist.mValue.z *= 1.0f / scale; + mDist.mValue.z = Math.max(20.0f, Math.min(mDist.mValue.z, 100.0f)); + mCameraDist.updateRSData(); + } + + public void onActionMove(float x, float y) { + if (mCameraRotate == null) { + return; + } + + float dx = mLastX - x; + float dy = mLastY - y; + + if (Math.abs(dy) <= 2.0f) { + dy = 0.0f; + } + if (Math.abs(dx) <= 2.0f) { + dx = 0.0f; + } + + mRotateY.mValue.w += dx*0.25; + if (mRotateY.mValue.w > 360) { + mRotateY.mValue.w -= 360; + } + if (mRotateY.mValue.w < 0) { + mRotateY.mValue.w += 360; + } + + mRotateX.mValue.w += dy*0.25; + mRotateX.mValue.w = Math.max(mRotateX.mValue.w, -80.0f); + mRotateX.mValue.w = Math.min(mRotateX.mValue.w, 0.0f); + + mLastX = x; + mLastY = y; + + mCameraRotate.updateRSData(); + } +} diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Transform.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Transform.java new file mode 100644 index 0000000000000..04793bca5d1c3 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Transform.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; + +import android.renderscript.*; +import android.renderscript.Matrix4f; +import android.util.Log; + +/** + * @hide + */ +public abstract class Transform extends SceneGraphBase { + + RenderScriptGL mRS; + Transform mParent; + ArrayList mChildren; + + static final int RS_ID_NONE = 0; + static final int RS_ID_TRANSLATE = 1; + static final int RS_ID_ROTATE = 2; + static final int RS_ID_SCALE = 3; + + ScriptField_SgTransform mField; + ScriptField_SgTransform.Item mTransformData; + + public Transform() { + mChildren = new ArrayList(); + mParent = null; + } + + public void appendChild(Transform t) { + mChildren.add(t); + t.mParent = this; + } + + abstract void initLocalData(); + public abstract void updateRSData(); + + public ScriptField_SgTransform getRSData(RenderScriptGL rs) { + if (mField != null) { + return mField; + } + + mRS = rs; + initLocalData(); + + if (mChildren.size() != 0) { + Allocation childRSData = Allocation.createSized(rs, + Element.ALLOCATION(rs), + mChildren.size()); + mTransformData.children = childRSData; + + Allocation[] childrenAllocs = new Allocation[mChildren.size()]; + for (int i = 0; i < mChildren.size(); i ++) { + Transform child = mChildren.get(i); + childrenAllocs[i] = child.getRSData(rs).getAllocation(); + } + childRSData.copyFrom(childrenAllocs); + } + + mField = new ScriptField_SgTransform(rs, 1); + mField.set(mTransformData, 0, true); + + return mField; + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TransformParam.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TransformParam.java new file mode 100644 index 0000000000000..fec7639583269 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TransformParam.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2011 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.scenegraph; + +import java.lang.Math; +import java.util.ArrayList; + +import android.graphics.Camera; +import android.renderscript.Matrix4f; +import android.renderscript.ProgramFragment; +import android.renderscript.ProgramStore; +import android.renderscript.ProgramVertex; +import android.renderscript.Element; +import android.util.Log; + +/** + * @hide + */ +public class TransformParam extends ShaderParam { + + public static final int TRANSFORM = 0; + public static final int TRANSFORM_VIEW = 1; + public static final int TRANSFORM_VIEW_PROJ = 2; + Transform mTransform; + Camera mCamera; + + public TransformParam(String name) { + super(name); + } + + public void setTransform(Transform t) { + mTransform = t; + } + + public void setCamera(Camera c) { + mCamera = c; + } +} + + + + + diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/camera.rs b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/camera.rs new file mode 100644 index 0000000000000..0b7b00c714d4b --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/camera.rs @@ -0,0 +1,44 @@ +// Copyright (C) 2011 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 rs java_package_name(com.android.scenegraph) + +//#define DEBUG_CAMERA +#include "transform_def.rsh" + +void root(const rs_allocation *v_in, rs_allocation *v_out, const float *usrData) { + + SgCamera *cam = (SgCamera *)rsGetElementAt(*v_in, 0); + float aspect = *usrData; + cam->aspect = aspect; + const SgTransform *camTransform = (const SgTransform *)rsGetElementAt(cam->transformMatrix, 0); + + rsMatrixLoadPerspective(&cam->proj, cam->horizontalFOV, cam->aspect, cam->near, cam->far); + + rs_matrix4x4 camPosMatrix; + rsMatrixLoad(&camPosMatrix, &camTransform->globalMat); + float4 zero = {0.0f, 0.0f, 0.0f, 1.0f}; + cam->position = rsMatrixMultiply(&camPosMatrix, zero); + + rsMatrixInverse(&camPosMatrix); + rsMatrixLoad(&cam->view, &camPosMatrix); + + rsMatrixLoad(&cam->viewProj, &cam->proj); + rsMatrixMultiply(&cam->viewProj, &cam->view); +#ifdef DEBUG_CAMERA + printCameraInfo(cam); +#endif //DEBUG_CAMERA +} diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/export.rs b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/export.rs new file mode 100644 index 0000000000000..1dfe63338c725 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/export.rs @@ -0,0 +1,28 @@ +// Copyright (C) 2011 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 rs java_package_name(com.android.scenegraph) + +// The sole purpose of this script is to have various structs exposed +// so that java reflected classes are generated +#include "transform_def.rsh" +SgTransform *exportPtr; +SgRenderState *sExport; +SgDrawable *drExport; +SgRenderPass *pExport; +SgCamera *exportPtrCam; +FBlurOffsets *blurExport; +VertexShaderInputs *iExport; \ No newline at end of file diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/render.rs b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/render.rs new file mode 100644 index 0000000000000..289165741be3c --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/render.rs @@ -0,0 +1,296 @@ +// Copyright (C) 2011 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 rs java_package_name(com.android.scenegraph) + +#include "rs_graphics.rsh" +#include "transform_def.rsh" + +rs_script gTransformScript; +rs_script gCameraScript; + +SgTransform *gRootNode; +rs_allocation gCameras; +rs_allocation gDrawableObjects; + +rs_allocation gRenderPasses; + +// Temporary shaders +rs_allocation gTGrid; +rs_program_store gPFSBackground; + +VShaderParams *vConst; +FShaderParams *fConst; + +uint32_t *gFrontToBack; +static uint32_t gFrontToBackCount = 0; +uint32_t *gBackToFront; +static uint32_t gBackToFrontCount = 0; + +static SgCamera *gActiveCamera = NULL; +static float4 gFrustumPlanes[6]; + +static rs_allocation nullAlloc; + +//#define DEBUG_RENDERABLES +static void draw(SgDrawable *obj) { + + const SgRenderState *renderState = (const SgRenderState *)rsGetElementAt(obj->render_state, 0); + const SgTransform *objTransform = (const SgTransform *)rsGetElementAt(obj->transformMatrix, 0); +#ifdef DEBUG_RENDERABLES + rsDebug("**** Drawing object with transform", obj); + printName(objTransform->name); + rsDebug("Model matrix: ", &objTransform->globalMat); + printName(obj->name); +#endif //DEBUG_RENDERABLES + + SgCamera *cam = gActiveCamera; + + rsMatrixLoad(&vConst->model, &objTransform->globalMat); + rsMatrixLoad(&vConst->viewProj, &cam->viewProj); + rsgAllocationSyncAll(rsGetAllocation(vConst)); + fConst->cameraPos = cam->position; + rsgAllocationSyncAll(rsGetAllocation(fConst)); + + if (rsIsObject(renderState->ps)) { + rsgBindProgramStore(renderState->ps); + } else { + rsgBindProgramStore(gPFSBackground); + } + + if (rsIsObject(renderState->pr)) { + rsgBindProgramRaster(renderState->pr); + } else { + rs_program_raster pr; + rsgBindProgramRaster(pr); + } + + rsgBindProgramFragment(renderState->pf); + rsgBindProgramVertex(renderState->pv); + + if (rsIsObject(obj->pf_textures[0])) { + rsgBindTexture(renderState->pf, 0, obj->pf_textures[0]); + } else { + rsgBindTexture(renderState->pf, 0, gTGrid); + } + + rsgDrawMesh(obj->mesh, obj->meshIndex); +} + +static void getTransformedSphere(SgDrawable *obj) { + obj->worldBoundingSphere = obj->boundingSphere; + obj->worldBoundingSphere.w = 1.0f; + const SgTransform *objTransform = (const SgTransform *)rsGetElementAt(obj->transformMatrix, 0); + obj->worldBoundingSphere = rsMatrixMultiply(&objTransform->globalMat, obj->worldBoundingSphere); + + const float4 unitVec = {0.57735f, 0.57735f, 0.57735f, 0.0f}; + float4 scaledVec = rsMatrixMultiply(&objTransform->globalMat, unitVec); + scaledVec.w = 0.0f; + obj->worldBoundingSphere.w = obj->boundingSphere.w * length(scaledVec); +} + +static bool frustumCulled(SgDrawable *obj) { + if (!obj->bVolInitialized) { + float minX, minY, minZ, maxX, maxY, maxZ; + rsgMeshComputeBoundingBox(obj->mesh, + &minX, &minY, &minZ, + &maxX, &maxY, &maxZ); + //rsDebug("min", minX, minY, minZ); + //rsDebug("max", maxX, maxY, maxZ); + float4 sphere; + sphere.x = (maxX + minX) * 0.5f; + sphere.y = (maxY + minY) * 0.5f; + sphere.z = (maxZ + minZ) * 0.5f; + float3 radius; + radius.x = (maxX - sphere.x); + radius.y = (maxY - sphere.y); + radius.z = (maxZ - sphere.z); + + sphere.w = length(radius); + obj->boundingSphere = sphere; + obj->bVolInitialized = 1; + //rsDebug("Sphere", sphere); + } + + getTransformedSphere(obj); + + return !rsIsSphereInFrustum(&obj->worldBoundingSphere, + &gFrustumPlanes[0], &gFrustumPlanes[1], + &gFrustumPlanes[2], &gFrustumPlanes[3], + &gFrustumPlanes[3], &gFrustumPlanes[4]); +} + +static void sortToBucket(SgDrawable *obj) { + // Not loaded yet + if (!rsIsObject(obj->mesh) || obj->cullType == 2) { + return; + } + + // check to see if we are culling this object and if it's + // outside the frustum + if (obj->cullType == 0 && frustumCulled(obj)) { +#ifdef DEBUG_RENDERABLES + rsDebug("Culled", obj); + printName(obj->name); +#endif //DEBUG_RENDERABLES + return; + } + const SgRenderState *renderState = (const SgRenderState *)rsGetElementAt(obj->render_state, 0); + if (rsIsObject(renderState->ps)) { + gBackToFront[gBackToFrontCount++] = (uint32_t)obj; + } else { + gFrontToBack[gFrontToBackCount++] = (uint32_t)obj; + } +} + +static void updateActiveCamera(rs_allocation cam) { + gActiveCamera = (SgCamera *)rsGetElementAt(cam, 0); + + rsExtractFrustumPlanes(&gActiveCamera->viewProj, + &gFrustumPlanes[0], &gFrustumPlanes[1], + &gFrustumPlanes[2], &gFrustumPlanes[3], + &gFrustumPlanes[3], &gFrustumPlanes[4]); +} + +static void prepareCameras() { + // now compute all the camera matrices + float aspect = (float)rsgGetWidth() / (float)rsgGetHeight(); + rsForEach(gCameraScript, gCameras, nullAlloc, &aspect, sizeof(aspect)); +} + +static void drawSorted() { + for (int i = 0; i < gFrontToBackCount; i ++) { + SgDrawable *current = (SgDrawable*)gFrontToBack[i]; + draw(current); + } + + for (int i = 0; i < gBackToFrontCount; i ++) { + SgDrawable *current = (SgDrawable*)gBackToFront[i]; + draw(current); + } +} + +static void drawAllObjects(rs_allocation allObj) { + if (!rsIsObject(allObj)) { + return; + } + int numDrawables = rsAllocationGetDimX(allObj); + for (int i = 0; i < numDrawables; i ++) { + rs_allocation *drawAlloc = (rs_allocation*)rsGetElementAt(allObj, i); + SgDrawable *current = (SgDrawable*)rsGetElementAt(*drawAlloc, 0); + sortToBucket(current); + } + drawSorted(); +} + +void root(const void *v_in, void *v_out) { + + //rsDebug("=============================================================================", 0); + // first step is to update the transform hierachy + rsForEach(gTransformScript, gRootNode->children, nullAlloc, 0, 0); + + prepareCameras(); + + rsgClearDepth(1.0f); + + int numDrawables = rsAllocationGetDimX(gDrawableObjects); + if (rsIsObject(gRenderPasses)) { + int numPasses = rsAllocationGetDimX(gRenderPasses); + for (uint i = 0; i < numPasses; i ++) { + gFrontToBackCount = 0; + gBackToFrontCount = 0; + SgRenderPass *pass = (SgRenderPass*)rsGetElementAt(gRenderPasses, i); + if (rsIsObject(pass->color_target)) { + rsgBindColorTarget(pass->color_target, 0); + } + if (rsIsObject(pass->depth_target)) { + rsgBindDepthTarget(pass->depth_target); + } + if (!rsIsObject(pass->color_target) && + !rsIsObject(pass->depth_target)) { + rsgClearAllRenderTargets(); + } + updateActiveCamera(pass->camera); + if (pass->should_clear_color) { + rsgClearColor(pass->clear_color.x, pass->clear_color.y, + pass->clear_color.z, pass->clear_color.w); + } + if (pass->should_clear_depth) { + rsgClearDepth(pass->clear_depth); + } + drawAllObjects(pass->objects); + } + } else { + gFrontToBackCount = 0; + gBackToFrontCount = 0; + rsgClearColor(1.0f, 1.0f, 1.0f, 1.0f); + rsgClearDepth(1.0f); + rs_allocation *camAlloc = (rs_allocation*)rsGetElementAt(gCameras, 1); + updateActiveCamera(*camAlloc); + drawAllObjects(gDrawableObjects); + } +} + +static bool intersect(const SgDrawable *obj, float3 pnt, float3 vec) { + // Solving for t^2 + Bt + C = 0 + float3 originMinusCenter = pnt - obj->worldBoundingSphere.xyz; + float B = dot(originMinusCenter, vec) * 2.0f; + float C = dot(originMinusCenter, originMinusCenter) - + obj->worldBoundingSphere.w * obj->worldBoundingSphere.w; + + float discriminant = B * B - 4.0f * C; + if (discriminant < 0.0f) { + return false; + } + discriminant = sqrt(discriminant); + + float t0 = (-B - discriminant) * 0.5f; + float t1 = (-B + discriminant) * 0.5f; + + if (t0 > t1) { + float temp = t0; + t0 = t1; + t1 = temp; + } + + // The sphere is behind us + if (t1 < 0.0f) { + return false; + } + return true; +} + +// Search through sorted and culled objects +void pick(int screenX, int screenY) { + float3 pnt, vec; + getCameraRay(gActiveCamera, screenX, screenY, &pnt, &vec); + + for (int i = 0; i < gFrontToBackCount; i ++) { + SgDrawable *current = (SgDrawable*)gFrontToBack[i]; + bool isPicked = intersect(current, pnt, vec); + if (isPicked) { + current->cullType = 2; + } + } + + for (int i = 0; i < gBackToFrontCount; i ++) { + SgDrawable *current = (SgDrawable*)gBackToFront[i]; + bool isPicked = intersect(current, pnt, vec); + if (isPicked) { + current->cullType = 2; + } + } +} diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/scenegraph.rs b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/scenegraph.rs new file mode 100644 index 0000000000000..421105b29f589 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/scenegraph.rs @@ -0,0 +1,90 @@ +// Copyright (C) 2011 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 rs java_package_name(com.android.scenegraph) + +#include "rs_graphics.rsh" +#include "transform_def.rsh" + +rs_program_vertex gPVBackground; +rs_program_fragment gPFBackground; + +rs_allocation gRobotTex; +rs_mesh gRobotMesh; + +rs_program_store gPFSBackground; + +rs_allocation gDummyAlloc; +rs_script gRenderLoop; + +bool gInitialized = false; + +float gRotate; + +void init() { + gRotate = 0.0f; +} + +static int pos = 50; +static float gRotateY = 120.0f; +static float3 gLookAt = 0; +static float gZoom = 50.0f; +static void displayLoading() { + if (rsIsObject(gRobotTex) && rsIsObject(gRobotMesh)) { + rsgBindProgramVertex(gPVBackground); + rs_matrix4x4 proj; + float aspect = (float)rsgGetWidth() / (float)rsgGetHeight(); + rsMatrixLoadPerspective(&proj, 30.0f, aspect, 1.0f, 100.0f); + rsgProgramVertexLoadProjectionMatrix(&proj); + + rsgBindProgramFragment(gPFBackground); + rsgBindProgramStore(gPFSBackground); + rsgBindTexture(gPFBackground, 0, gRobotTex); + + rs_matrix4x4 matrix; + rsMatrixLoadIdentity(&matrix); + // Position our models on the screen + gRotateY += rsGetDt()*100; + rsMatrixTranslate(&matrix, 0, 0, -gZoom); + rsMatrixRotate(&matrix, 20.0f, 1.0f, 0.0f, 0.0f); + rsMatrixRotate(&matrix, gRotateY, 0.0f, 1.0f, 0.0f); + rsMatrixScale(&matrix, 0.2f, 0.2f, 0.2f); + rsgProgramVertexLoadModelMatrix(&matrix); + rsgDrawMesh(gRobotMesh); + } + + uint width = rsgGetWidth(); + uint height = rsgGetHeight(); + int left = 0, right = 0, top = 0, bottom = 0; + const char* text = "Initializing..."; + rsgMeasureText(text, &left, &right, &top, &bottom); + int centeredPos = width / 2 - (right - left) / 2; + rsgDrawText(text, centeredPos, height / 2 + height / 10); +} + +int root(void) { + rs_allocation nullAlloc; + if (!gInitialized) { + rsgClearColor(1.0f, 1.0f, 1.0f, 1.0f); + rsgClearDepth(1.0f); + displayLoading(); + return 30; + } + + rsForEach(gRenderLoop, gDummyAlloc, nullAlloc); + + return 10; +} diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/transform.rs b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/transform.rs new file mode 100644 index 0000000000000..6bc5317bf9e3f --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/transform.rs @@ -0,0 +1,111 @@ +// Copyright (C) 2011 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 rs java_package_name(com.android.modelviewer) + +//#define DEBUG_TRANSFORMS + +#include "transform_def.rsh" + +rs_script gTransformScript; + +typedef struct { + int changed; + rs_matrix4x4 *mat; +} ParentData; + +static void appendTransformation(int type, float4 data, rs_matrix4x4 *mat) { + rs_matrix4x4 temp; + + switch (type) { + case TRANSFORM_TRANSLATE: + rsMatrixLoadTranslate(&temp, data.x, data.y, data.z); + break; + case TRANSFORM_ROTATE: + rsMatrixLoadRotate(&temp, data.w, data.x, data.y, data.z); + break; + case TRANSFORM_SCALE: + rsMatrixLoadScale(&temp, data.x, data.y, data.z); + break; + } + rsMatrixMultiply(mat, &temp); +} + +void root(const rs_allocation *v_in, rs_allocation *v_out, const void *usrData) { + + SgTransform *data = (SgTransform *)rsGetElementAt(*v_in, 0); + const ParentData *parent = (const ParentData *)usrData; + +#ifdef DEBUG_TRANSFORMS + rsDebug("**** Transform data", (int)data); + rsDebug("Transform is dirty", data->isDirty); + rsDebug("Transform parent", (int)parent); + rsDebug("Transform child ", (int)data->children.p); + printName(data->name); +#endif //DEBUG_TRANSFORMS + + rs_matrix4x4 *localMat = &data->localMat; + rs_matrix4x4 *globalMat = &data->globalMat; + + ParentData toChild; + toChild.changed = 0; + toChild.mat = globalMat; + + // Refresh matrices if dirty + if (data->isDirty) { + toChild.changed = 1; + + bool resetLocal = false; + for (int i = 0; i < 16; i ++) { + if (data->transformTypes[i] == TRANSFORM_NONE) { + break; + } + if (!resetLocal) { + // Reset our local matrix only for component transforms + rsMatrixLoadIdentity(localMat); + resetLocal = true; + } +#ifdef DEBUG_TRANSFORMS + if (rsIsObject(data->transformNames[i])) { + rsDebug((const char*)rsGetElementAt(data->transformNames[i], 0), + data->transforms[i]); + } else { + rsDebug("Transform adding transformation type", data->transformTypes[i]); + rsDebug("Transform adding transformation", data->transforms[i]); + } +#endif //DEBUG_TRANSFORMS + appendTransformation(data->transformTypes[i], data->transforms[i], localMat); + } + } + + if (parent) { + if (parent->changed || data->isDirty) { + toChild.changed = 1; + + rsMatrixLoad(globalMat, parent->mat); + rsMatrixMultiply(globalMat, localMat); + } + } else if (data->isDirty) { + rsMatrixLoad(globalMat, localMat); + } + + if (rsIsObject(data->children)) { + rs_allocation nullAlloc; + rsForEach(gTransformScript, data->children, nullAlloc, &toChild, sizeof(toChild)); + } + + data->isDirty = 0; +} diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/transform_def.rsh b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/transform_def.rsh new file mode 100644 index 0000000000000..e093bf956f348 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/transform_def.rsh @@ -0,0 +1,179 @@ +// 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 rs java_package_name(com.android.scenegraph) + +#include "rs_graphics.rsh" + +#define TRANSFORM_NONE 0 +#define TRANSFORM_TRANSLATE 1 +#define TRANSFORM_ROTATE 2 +#define TRANSFORM_SCALE 3 + +static void printName(rs_allocation name) { + rsDebug("Object Name: ", 0); + if (!rsIsObject(name)) { + rsDebug("no name", 0); + return; + } + + rsDebug((const char*)rsGetElementAt(name, 0), 0); +} + +typedef struct __attribute__((packed, aligned(4))) SgTransform { + rs_matrix4x4 globalMat; + rs_matrix4x4 localMat; + + float4 transforms[16]; + int transformTypes[16]; + rs_allocation transformNames[16]; + + int isDirty; + + rs_allocation children; + + rs_allocation name; +} SgTransform; + +typedef struct RenderState_s { + rs_program_vertex pv; + rs_program_fragment pf; + rs_program_store ps; + rs_program_raster pr; +} SgRenderState; + +typedef struct Drawable_s { + rs_allocation render_state; + rs_allocation pv_const; + rs_allocation pf_const; + rs_allocation pf_textures[8]; + int pf_num_textures; + rs_mesh mesh; + int meshIndex; + rs_allocation transformMatrix; + rs_allocation name; + float4 boundingSphere; + float4 worldBoundingSphere; + int bVolInitialized; + int cullType; // specifies whether to frustum cull +} SgDrawable; + +typedef struct RenderPass_s { + rs_allocation color_target; + rs_allocation depth_target; + rs_allocation camera; + rs_allocation objects; + + float4 clear_color; + float clear_depth; + bool should_clear_color; + bool should_clear_depth; +} SgRenderPass; + +typedef struct __attribute__((packed, aligned(4))) Camera_s { + rs_matrix4x4 proj; + rs_matrix4x4 view; + rs_matrix4x4 viewProj; + float4 position; + float near; + float far; + float horizontalFOV; + float aspect; + rs_allocation name; + rs_allocation transformMatrix; +} SgCamera; + +typedef struct VShaderParams_s { + rs_matrix4x4 model; + rs_matrix4x4 viewProj; +} VShaderParams; + +typedef struct FShaderParams_s { + float4 cameraPos; +} FShaderParams; + +typedef struct FBlurOffsets_s { + float blurOffset0; + float blurOffset1; + float blurOffset2; + float blurOffset3; +} FBlurOffsets; + +typedef struct VertexShaderInputs_s { + float4 position; + float3 normal; + float2 texture0; +} VertexShaderInputs; + +static void printCameraInfo(SgCamera *cam) { + rsDebug("***** Camera information. ptr:", cam); + printName(cam->name); + const SgTransform *camTransform = (const SgTransform *)rsGetElementAt(cam->transformMatrix, 0); + rsDebug("Transform name:", camTransform); + printName(camTransform->name); + + rsDebug("Aspect: ", cam->aspect); + rsDebug("Near: ", cam->near); + rsDebug("Far: ", cam->far); + rsDebug("Fov: ", cam->horizontalFOV); + rsDebug("Position: ", cam->position); + rsDebug("Proj: ", &cam->proj); + rsDebug("View: ", &cam->view); +} + +static void getCameraRay(const SgCamera *cam, int screenX, int screenY, float3 *pnt, float3 *vec) { + rsDebug("=================================", screenX); + rsDebug("Point X", screenX); + rsDebug("Point Y", screenY); + + rs_matrix4x4 mvpInv; + rsMatrixLoad(&mvpInv, &cam->viewProj); + rsMatrixInverse(&mvpInv); + + float width = (float)rsgGetWidth(); + float height = (float)rsgGetHeight(); + + float4 pos = {(float)screenX, height - (float)screenY, 0.0f, 1.0f}; + + pos.x /= width; + pos.y /= height; + + rsDebug("Pre Norm X", pos.x); + rsDebug("Pre Norm Y", pos.y); + + pos.xy = pos.xy * 2.0f - 1.0f; + + rsDebug("Norm X", pos.x); + rsDebug("Norm Y", pos.y); + + pos = rsMatrixMultiply(&mvpInv, pos); + float oneOverW = 1.0f / pos.w; + pos.xyz *= oneOverW; + + rsDebug("World X", pos.x); + rsDebug("World Y", pos.y); + rsDebug("World Z", pos.z); + + rsDebug("Cam X", cam->position.x); + rsDebug("Cam Y", cam->position.y); + rsDebug("Cam Z", cam->position.z); + + *vec = normalize(pos.xyz - cam->position.xyz); + rsDebug("Vec X", vec->x); + rsDebug("Vec Y", vec->y); + rsDebug("Vec Z", vec->z); + *pnt = cam->position.xyz; +}

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 T+*+Eq00000NkvXXu0mjfs!IW% literal 0 HcmV?d00001 diff --git a/tests/RenderScriptTests/SceneGraph/res/menu/loader_menu.xml b/tests/RenderScriptTests/SceneGraph/res/menu/loader_menu.xml new file mode 100644 index 0000000000000..9ea3010759b69 --- /dev/null +++ b/tests/RenderScriptTests/SceneGraph/res/menu/loader_menu.xml @@ -0,0 +1,25 @@ + + + +