summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorAlex Sakhartchouk <alexst@google.com>2012-02-21 15:52:47 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-02-21 15:52:47 -0800
commitc7359dfe6abe22f181349c69312a3173209c6d7a (patch)
tree024140a94ebf9c36f814d9d0ee5232b0e653bf98 /tests
parentaa4ee4238f072650363a78a0228d07f925400565 (diff)
parentc71343acc469db7ec351db2344032801e0e1b30a (diff)
downloadframeworks_base-c7359dfe6abe22f181349c69312a3173209c6d7a.zip
frameworks_base-c7359dfe6abe22f181349c69312a3173209c6d7a.tar.gz
frameworks_base-c7359dfe6abe22f181349c69312a3173209c6d7a.tar.bz2
Merge "Adding better default behaviour for programmatically created objects."
Diffstat (limited to 'tests')
-rw-r--r--tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/FragmentShader.java5
-rw-r--r--tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Renderable.java3
-rw-r--r--tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Scene.java24
-rw-r--r--tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneManager.java137
-rw-r--r--tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ShaderParam.java2
-rw-r--r--tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/VertexShader.java5
-rw-r--r--tests/RenderScriptTests/SceneGraph/src/com/android/testapp/TestAppRS.java28
7 files changed, 182 insertions, 22 deletions
diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/FragmentShader.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/FragmentShader.java
index c8cc3ac..c8e25fe 100644
--- a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/FragmentShader.java
+++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/FragmentShader.java
@@ -48,6 +48,11 @@ public class FragmentShader extends Shader {
return this;
}
+ public Builder setShader(String code) {
+ mBuilder.setShader(code);
+ return this;
+ }
+
public Builder setObjectConst(Type type) {
mShader.mPerObjConstants = type;
return this;
diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Renderable.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Renderable.java
index 9f7ab41..3476e35 100644
--- a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Renderable.java
+++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Renderable.java
@@ -196,6 +196,9 @@ public class Renderable extends RenderableBase {
}
void updateFieldItem(RenderScriptGL rs) {
+ if (mRenderState == null) {
+ mRenderState = SceneManager.getDefaultState();
+ }
updateVertexConstants(rs);
updateFragmentConstants(rs);
diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Scene.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Scene.java
index 8c09860..e840346 100644
--- a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Scene.java
+++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Scene.java
@@ -75,6 +75,9 @@ public class Scene extends SceneGraphBase {
}
public void appendTransform(Transform t) {
+ if (t == null) {
+ throw new RuntimeException("Adding null object");
+ }
mRootTransforms.appendChild(t);
}
@@ -88,6 +91,9 @@ public class Scene extends SceneGraphBase {
}
public void appendRenderPass(RenderPass p) {
+ if (p == null) {
+ throw new RuntimeException("Adding null object");
+ }
mRenderPasses.add(p);
}
@@ -96,18 +102,30 @@ public class Scene extends SceneGraphBase {
}
public void appendLight(LightBase l) {
+ if (l == null) {
+ throw new RuntimeException("Adding null object");
+ }
mLights.add(l);
}
public void appendCamera(Camera c) {
+ if (c == null) {
+ throw new RuntimeException("Adding null object");
+ }
mCameras.add(c);
}
public void appendShader(FragmentShader f) {
+ if (f == null) {
+ throw new RuntimeException("Adding null object");
+ }
mFragmentShaders.add(f);
}
public void appendShader(VertexShader v) {
+ if (v == null) {
+ throw new RuntimeException("Adding null object");
+ }
mVertexShaders.add(v);
}
@@ -120,6 +138,9 @@ public class Scene extends SceneGraphBase {
}
public void appendRenderable(RenderableBase d) {
+ if (d == null) {
+ throw new RuntimeException("Adding null object");
+ }
mRenderables.add(d);
mRenderableMap.put(d.getName(), d);
}
@@ -133,6 +154,9 @@ public class Scene extends SceneGraphBase {
}
public void appendTextures(Texture2D tex) {
+ if (tex == null) {
+ throw new RuntimeException("Adding null object");
+ }
mTextures.add(tex);
}
diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneManager.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneManager.java
index 535905a..2e9a5eb 100644
--- a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneManager.java
+++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneManager.java
@@ -29,8 +29,10 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.android.scenegraph.Camera;
+import com.android.scenegraph.FragmentShader;
import com.android.scenegraph.MatrixTransform;
import com.android.scenegraph.Scene;
+import com.android.scenegraph.VertexShader;
import com.android.testapp.R;
import android.content.res.Resources;
@@ -41,7 +43,6 @@ import android.renderscript.*;
import android.renderscript.Allocation.MipmapControl;
import android.renderscript.Mesh;
import android.renderscript.RenderScriptGL;
-import android.renderscript.Type.Builder;
import android.util.Log;
import android.view.SurfaceHolder;
@@ -74,6 +75,12 @@ public class SceneManager extends SceneGraphBase {
private Allocation mDefault2D;
private Allocation mDefaultCube;
+ private FragmentShader mColor;
+ private FragmentShader mTexture;
+ private VertexShader mDefaultVertex;
+
+ private RenderState mDefaultState;
+
private static Allocation getDefault(boolean isCube) {
final int dimension = 4;
final int bytesPerPixel = 4;
@@ -101,6 +108,9 @@ public class SceneManager extends SceneGraphBase {
if (sSceneManager == null) {
return null;
}
+ if (sSceneManager.mDefault2D == null) {
+ sSceneManager.mDefault2D = getDefault(false);
+ }
return sSceneManager.mDefault2D;
}
@@ -108,6 +118,9 @@ public class SceneManager extends SceneGraphBase {
if (sSceneManager == null) {
return null;
}
+ if (sSceneManager.mDefaultCube == null) {
+ sSceneManager.mDefaultCube = getDefault(true);
+ }
return sSceneManager.mDefaultCube;
}
@@ -229,6 +242,10 @@ public class SceneManager extends SceneGraphBase {
public void setActiveScene(Scene s) {
mActiveScene = s;
+ if (mActiveScene == null) {
+ return;
+ }
+
// Do some sanity checking
if (mActiveScene.getCameras().size() == 0) {
Matrix4f camPos = new Matrix4f();
@@ -242,6 +259,8 @@ public class SceneManager extends SceneGraphBase {
cam.setTransform(cameraTransform);
mActiveScene.appendCamera(cam);
}
+
+ mActiveScene.appendShader(getDefaultVS());
}
static RenderScriptGL getRS() {
@@ -258,6 +277,114 @@ public class SceneManager extends SceneGraphBase {
return sSceneManager.mRes;
}
+ // Provides the folowing inputs to fragment shader
+ // Assigned by default if nothing is present
+ // vec3 varWorldPos;
+ // vec3 varWorldNormal;
+ // vec2 varTex0;
+ public static VertexShader getDefaultVS() {
+ if (sSceneManager == null) {
+ return null;
+ }
+
+ if (sSceneManager.mDefaultVertex == null) {
+ RenderScriptGL rs = getRS();
+ Element.Builder b = new Element.Builder(rs);
+ b.add(Element.MATRIX_4X4(rs), "model");
+ Type.Builder objConstBuilder = new Type.Builder(rs, b.create());
+
+ b = new Element.Builder(rs);
+ b.add(Element.MATRIX_4X4(rs), "viewProj");
+ Type.Builder shaderConstBuilder = new Type.Builder(rs, b.create());
+
+ b = new Element.Builder(rs);
+ b.add(Element.F32_4(rs), "position");
+ b.add(Element.F32_2(rs), "texture0");
+ b.add(Element.F32_3(rs), "normal");
+ Element defaultIn = b.create();
+
+ final String code = "\n" +
+ "varying vec3 varWorldPos;\n" +
+ "varying vec3 varWorldNormal;\n" +
+ "varying vec2 varTex0;\n" +
+ "void main() {" +
+ " vec4 objPos = ATTRIB_position;\n" +
+ " vec4 worldPos = UNI_model * objPos;\n" +
+ " gl_Position = UNI_viewProj * worldPos;\n" +
+ " mat3 model3 = mat3(UNI_model[0].xyz, UNI_model[1].xyz, UNI_model[2].xyz);\n" +
+ " vec3 worldNorm = model3 * ATTRIB_normal;\n" +
+ " varWorldPos = worldPos.xyz;\n" +
+ " varWorldNormal = worldNorm;\n" +
+ " varTex0 = ATTRIB_texture0;\n" +
+ "}\n";
+
+ VertexShader.Builder sb = new VertexShader.Builder(rs);
+ sb.addInput(defaultIn);
+ sb.setObjectConst(objConstBuilder.setX(1).create());
+ sb.setShaderConst(shaderConstBuilder.setX(1).create());
+ sb.setShader(code);
+ sSceneManager.mDefaultVertex = sb.create();
+ }
+
+ return sSceneManager.mDefaultVertex;
+ }
+
+ public static FragmentShader getColorFS() {
+ if (sSceneManager == null) {
+ return null;
+ }
+ if (sSceneManager.mColor == null) {
+ RenderScriptGL rs = getRS();
+ Element.Builder b = new Element.Builder(rs);
+ b.add(Element.F32_4(rs), "color");
+ Type.Builder objConstBuilder = new Type.Builder(rs, b.create());
+
+ final String code = "\n" +
+ "varying vec2 varTex0;\n" +
+ "void main() {\n" +
+ " lowp vec4 col = texture2D(UNI_Tex0, varTex0).rgba;\n" +
+ " gl_FragColor = col;\n" +
+ "}\n";
+ FragmentShader.Builder fb = new FragmentShader.Builder(rs);
+ fb.setShader(code);
+ fb.setObjectConst(objConstBuilder.create());
+ sSceneManager.mColor = fb.create();
+ }
+
+ return sSceneManager.mColor;
+ }
+
+ public static FragmentShader getTextureFS() {
+ if (sSceneManager == null) {
+ return null;
+ }
+ if (sSceneManager.mTexture == null) {
+ RenderScriptGL rs = getRS();
+ final String code = "\n" +
+ "varying vec2 varTex0;\n" +
+ "void main() {\n" +
+ " lowp vec4 col = UNI_color;\n" +
+ " gl_FragColor = col;\n" +
+ "}\n";
+ FragmentShader.Builder fb = new FragmentShader.Builder(rs);
+ fb.setShader(code);
+ fb.addTexture(Program.TextureType.TEXTURE_2D, "Tex0");
+ sSceneManager.mTexture = fb.create();
+ }
+
+ return sSceneManager.mTexture;
+ }
+
+ static RenderState getDefaultState() {
+ if (sSceneManager == null) {
+ return null;
+ }
+ if (sSceneManager.mDefaultState == null) {
+ sSceneManager.mDefaultState = new RenderState(getDefaultVS(), getColorFS(), null, null);
+ }
+ return sSceneManager.mDefaultState;
+ }
+
public static SceneManager getInstance() {
if (sSceneManager == null) {
sSceneManager = new SceneManager();
@@ -316,8 +443,12 @@ public class SceneManager extends SceneGraphBase {
mAllocationMap = new HashMap<String, Allocation>();
mQuad = null;
- mDefault2D = getDefault(false);
- mDefaultCube = getDefault(true);
+ mDefault2D = null;
+ mDefaultCube = null;
+ mDefaultVertex = null;
+ mColor = null;
+ mTexture = null;
+ mDefaultState = null;
mExportScript = new ScriptC_export(rs, res, R.raw.export);
diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ShaderParam.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ShaderParam.java
index 8dea535..3dd41ca 100644
--- a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ShaderParam.java
+++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/ShaderParam.java
@@ -75,7 +75,7 @@ public abstract class ShaderParam extends SceneGraphBase {
// Make one if it's not there
if (matchingParam == null) {
if (subElem.getDataType() == Element.DataType.FLOAT_32) {
- matchingParam = new Float4Param(inputName);
+ matchingParam = new Float4Param(inputName, 0.5f, 0.5f, 0.5f, 0.5f);
} else if (subElem.getDataType() == Element.DataType.MATRIX_4X4) {
TransformParam trParam = new TransformParam(inputName);
trParam.setTransform(transform);
diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/VertexShader.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/VertexShader.java
index f7d0e6d..4efaff7 100644
--- a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/VertexShader.java
+++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/VertexShader.java
@@ -44,6 +44,11 @@ public class VertexShader extends Shader {
return this;
}
+ public Builder setShader(String code) {
+ mBuilder.setShader(code);
+ return this;
+ }
+
public Builder setObjectConst(Type type) {
mShader.mPerObjConstants = type;
return this;
diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/TestAppRS.java b/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/TestAppRS.java
index 7bf7812..f159e85 100644
--- a/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/TestAppRS.java
+++ b/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/TestAppRS.java
@@ -149,34 +149,27 @@ public class TestAppRS {
}
private void initPaintShaders() {
- ScriptField_ModelParams objConst = new ScriptField_ModelParams(mRS, 1);
- ScriptField_ViewProjParams shaderConst = new ScriptField_ViewProjParams(mRS, 1);
+ mGenericV = SceneManager.getDefaultVS();
- VertexShader.Builder vb = new VertexShader.Builder(mRS);
- vb.addInput(ScriptField_VertexShaderInputs.createElement(mRS));
- vb.setShader(mRes, R.raw.shader2v);
- vb.setObjectConst(objConst.getAllocation().getType());
- vb.setShaderConst(shaderConst.getAllocation().getType());
- mGenericV = vb.create();
+ ScriptField_CameraParams camParams = new ScriptField_CameraParams(mRS, 1);
+ Type camParamType = camParams.getAllocation().getType();
+ ScriptField_LightParams lightParams = new ScriptField_LightParams(mRS, 1);
- ScriptField_CameraParams fsConst = new ScriptField_CameraParams(mRS, 1);
- ScriptField_LightParams fsConst2 = new ScriptField_LightParams(mRS, 1);
-
- mPaintF = createFromResource(R.raw.paintf, true, fsConst.getAllocation().getType());
+ mPaintF = createFromResource(R.raw.paintf, true, camParamType);
// Assign a reflection map
TextureCube envCube = new TextureCube("sdcard/scenegraph/", "cube_env.png");
mPaintF.appendSourceParams(new TextureParam("reflection", envCube));
- mAluminumF = createFromResource(R.raw.metal, true, fsConst.getAllocation().getType());
+ mAluminumF = createFromResource(R.raw.metal, true, camParamType);
TextureCube diffCube = new TextureCube("sdcard/scenegraph/", "cube_spec.png");
mAluminumF.appendSourceParams(new TextureParam("reflection", diffCube));
- mPlasticF = createFromResource(R.raw.plastic, false, fsConst.getAllocation().getType());
- mDiffuseF = createFromResource(R.raw.diffuse, false, fsConst.getAllocation().getType());
- mTextureF = createFromResource(R.raw.texture, false, fsConst.getAllocation().getType());
+ mPlasticF = createFromResource(R.raw.plastic, false, camParamType);
+ mDiffuseF = createFromResource(R.raw.diffuse, false, camParamType);
+ mTextureF = SceneManager.getTextureFS();
FragmentShader.Builder fb = new FragmentShader.Builder(mRS);
- fb.setObjectConst(fsConst2.getAllocation().getType());
+ fb.setObjectConst(lightParams.getAllocation().getType());
fb.setShader(mRes, R.raw.plastic_lights);
mLightsF = fb.create();
@@ -214,7 +207,6 @@ public class TestAppRS {
mActiveScene.appendShader(mPlasticF);
mActiveScene.appendShader(mDiffuseF);
mActiveScene.appendShader(mTextureF);
- mActiveScene.appendShader(mGenericV);
}
public void prepareToRender(Scene s) {