From d2dc9838961f945c402e5d810bc715196240be6f Mon Sep 17 00:00:00 2001 From: Alex Sakhartchouk Date: Wed, 22 Feb 2012 11:59:12 -0800 Subject: [PATCH] Simplifying programmatic creation. Change-Id: I792f96b5ed47d3c78976d57259074c9ae402575b --- .../SceneGraph/res/drawable-nodpi/icon.png | Bin 0 -> 7529 bytes .../com/android/scenegraph/Renderable.java | 13 +++- .../src/com/android/scenegraph/Scene.java | 38 ++++++++++- .../com/android/scenegraph/SceneManager.java | 52 +++++++++++---- .../src/com/android/scenegraph/Texture2D.java | 20 +++++- .../com/android/scenegraph/TextureCube.java | 14 +++- .../src/com/android/testapp/SimpleAppRS.java | 63 ++++++++++-------- .../src/com/android/testapp/TouchHandler.java | 6 +- 8 files changed, 154 insertions(+), 52 deletions(-) create mode 100644 tests/RenderScriptTests/SceneGraph/res/drawable-nodpi/icon.png diff --git a/tests/RenderScriptTests/SceneGraph/res/drawable-nodpi/icon.png b/tests/RenderScriptTests/SceneGraph/res/drawable-nodpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ff34a7ffcc4f5bbed884cf82ed63568aaf3c8550 GIT binary patch literal 7529 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 getRenderables() { diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneManager.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneManager.java index 3d1019ea10dba..4ff2c8b09371c 100644 --- a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneManager.java +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/SceneManager.java @@ -80,6 +80,7 @@ public class SceneManager extends SceneGraphBase { private VertexShader mDefaultVertex; private RenderState mDefaultState; + private Transform mDefaultTransform; private static Allocation getDefault(boolean isCube) { final int dimension = 4; @@ -161,24 +162,32 @@ public class SceneManager extends SceneGraphBase { return b; } - public static Allocation loadCubemap(String name, RenderScriptGL rs, Resources res) { - Bitmap b = loadBitmap(name, res); + static Allocation createFromBitmap(Bitmap b, RenderScriptGL rs, boolean isCube) { if (b == null) { return null; } - return Allocation.createCubemapFromBitmap(rs, b, - MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, - Allocation.USAGE_GRAPHICS_TEXTURE); + MipmapControl mip = MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE; + int usage = Allocation.USAGE_GRAPHICS_TEXTURE; + if (isCube) { + return Allocation.createCubemapFromBitmap(rs, b, mip, usage); + } + return Allocation.createFromBitmap(rs, b, mip, usage); + } + + public static Allocation loadCubemap(String name, RenderScriptGL rs, Resources res) { + return createFromBitmap(loadBitmap(name, res), rs, true); + } + + public static Allocation loadCubemap(int id, RenderScriptGL rs, Resources res) { + return createFromBitmap(BitmapFactory.decodeResource(res, id), rs, true); } public static Allocation loadTexture2D(String name, RenderScriptGL rs, Resources res) { - Bitmap b = loadBitmap(name, res); - if (b == null) { - return null; - } - return Allocation.createFromBitmap(rs, b, - Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, - Allocation.USAGE_GRAPHICS_TEXTURE); + return createFromBitmap(loadBitmap(name, res), rs, false); + } + + public static Allocation loadTexture2D(int id, RenderScriptGL rs, Resources res) { + return createFromBitmap(BitmapFactory.decodeResource(res, id), rs, false); } public static ProgramStore BLEND_ADD_DEPTH_NONE(RenderScript rs) { @@ -261,6 +270,7 @@ public class SceneManager extends SceneGraphBase { } mActiveScene.appendShader(getDefaultVS()); + mActiveScene.appendTransform(getDefaultTransform()); } static RenderScriptGL getRS() { @@ -364,14 +374,15 @@ public class SceneManager extends SceneGraphBase { final String code = "\n" + "varying vec2 varTex0;\n" + "void main() {\n" + - " lowp vec4 col = texture2D(UNI_Tex0, varTex0).rgba;\n" + + " lowp vec4 col = texture2D(UNI_color, varTex0).rgba;\n" + " gl_FragColor = col;\n" + "}\n"; FragmentShader.Builder fb = new FragmentShader.Builder(rs); fb.setShader(code); - fb.addTexture(Program.TextureType.TEXTURE_2D, "Tex0"); + fb.addTexture(Program.TextureType.TEXTURE_2D, "color"); sSceneManager.mTexture = fb.create(); + sSceneManager.mTexture.mProgram.bindSampler(Sampler.CLAMP_LINEAR_MIP_LINEAR(rs), 0); } return sSceneManager.mTexture; @@ -383,10 +394,22 @@ public class SceneManager extends SceneGraphBase { } if (sSceneManager.mDefaultState == null) { sSceneManager.mDefaultState = new RenderState(getDefaultVS(), getColorFS(), null, null); + sSceneManager.mDefaultState.setName("__DefaultState"); } return sSceneManager.mDefaultState; } + static Transform getDefaultTransform() { + if (sSceneManager == null) { + return null; + } + if (sSceneManager.mDefaultTransform == null) { + sSceneManager.mDefaultTransform = new MatrixTransform(); + sSceneManager.mDefaultTransform.setName("__DefaultTransform"); + } + return sSceneManager.mDefaultTransform; + } + public static SceneManager getInstance() { if (sSceneManager == null) { sSceneManager = new SceneManager(); @@ -444,6 +467,7 @@ public class SceneManager extends SceneGraphBase { mColor = null; mTexture = null; mDefaultState = null; + mDefaultTransform = null; mExportScript = new ScriptC_export(rs, res, R.raw.export); diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Texture2D.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Texture2D.java index 8fae9d9317008..b53ab883708e6 100644 --- a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Texture2D.java +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/Texture2D.java @@ -30,6 +30,7 @@ import android.util.Log; public class Texture2D extends TextureBase { String mFileName; String mFileDir; + int mResourceID; public Texture2D() { super(ScriptC_export.const_TextureType_TEXTURE_2D); @@ -40,6 +41,17 @@ public class Texture2D extends TextureBase { setTexture(tex); } + public Texture2D(String dir, String file) { + super(ScriptC_export.const_TextureType_TEXTURE_CUBE); + setFileDir(dir); + setFileName(file); + } + + public Texture2D(int resourceID) { + super(ScriptC_export.const_TextureType_TEXTURE_2D); + mResourceID = resourceID; + } + public void setFileDir(String dir) { mFileDir = dir; } @@ -62,8 +74,12 @@ public class Texture2D extends TextureBase { void load() { RenderScriptGL rs = SceneManager.getRS(); Resources res = SceneManager.getRes(); - String shortName = mFileName.substring(mFileName.lastIndexOf('/') + 1); - setTexture(SceneManager.loadTexture2D(mFileDir + shortName, rs, res)); + if (mFileName != null && mFileName.length() > 0) { + String shortName = mFileName.substring(mFileName.lastIndexOf('/') + 1); + setTexture(SceneManager.loadTexture2D(mFileDir + shortName, rs, res)); + } else if (mResourceID != 0) { + setTexture(SceneManager.loadTexture2D(mResourceID, rs, res)); + } } ScriptField_Texture_s getRsData(boolean loadNow) { diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TextureCube.java b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TextureCube.java index 12c81c20dd11c..1269e3caa06a4 100644 --- a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TextureCube.java +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/TextureCube.java @@ -31,6 +31,7 @@ import android.util.Log; public class TextureCube extends TextureBase { String mFileName; String mFileDir; + int mResourceID; public TextureCube() { super(ScriptC_export.const_TextureType_TEXTURE_CUBE); @@ -47,6 +48,11 @@ public class TextureCube extends TextureBase { setFileName(file); } + public TextureCube(int resourceID) { + super(ScriptC_export.const_TextureType_TEXTURE_2D); + mResourceID = resourceID; + } + public void setFileDir(String dir) { mFileDir = dir; } @@ -69,8 +75,12 @@ public class TextureCube extends TextureBase { void load() { RenderScriptGL rs = SceneManager.getRS(); Resources res = SceneManager.getRes(); - String shortName = mFileName.substring(mFileName.lastIndexOf('/') + 1); - setTexture(SceneManager.loadCubemap(mFileDir + shortName, rs, res)); + if (mFileName != null && mFileName.length() > 0) { + String shortName = mFileName.substring(mFileName.lastIndexOf('/') + 1); + setTexture(SceneManager.loadCubemap(mFileDir + shortName, rs, res)); + } else if (mResourceID != 0) { + setTexture(SceneManager.loadCubemap(mResourceID , rs, res)); + } } ScriptField_Texture_s getRsData(boolean loadNow) { diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/SimpleAppRS.java b/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/SimpleAppRS.java index 938883865db10..621bfa364bac3 100644 --- a/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/SimpleAppRS.java +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/SimpleAppRS.java @@ -38,12 +38,13 @@ public class SimpleAppRS { private static String TAG = "SimpleAppRS"; SceneManager mSceneManager; - ArrayList geometry = new ArrayList(); - Scene mScene; RenderScriptGL mRS; Resources mRes; + Scene mScene; + Mesh mSimpleMesh; + public void init(RenderScriptGL rs, Resources res, int width, int height) { mRS = rs; mRes = res; @@ -53,9 +54,9 @@ public class SimpleAppRS { mScene = new Scene(); setupGeometry(); + setupRenderables(); setupCamera(); setupRenderPass(); - setupShaders(); mSceneManager.setActiveScene(mScene); @@ -63,16 +64,9 @@ public class SimpleAppRS { mRS.bindRootScript(mSceneManager.getRenderLoop()); } - private void setupShaders() { - // Built-in shader that provides position, texcoord and normal - VertexShader genericV = SceneManager.getDefaultVS(); - // Built-in shader that displays a color - FragmentShader colorF = SceneManager.getColorFS(); - mScene.assignRenderState(new RenderState(genericV, colorF, null, null)); - } private void setupGeometry() { - Mesh.TriangleMeshBuilder tmb = new Mesh.TriangleMeshBuilder(mRS, - 3, Mesh.TriangleMeshBuilder.TEXTURE_0); + Mesh.TriangleMeshBuilder tmb = new Mesh.TriangleMeshBuilder(mRS, 3, + Mesh.TriangleMeshBuilder.TEXTURE_0); tmb.setTexture(0.0f, 1.0f).addVertex(-1.0f, 1.0f, 0.0f); tmb.setTexture(0.0f, 0.0f).addVertex(-1.0f, -1.0f, 0.0f); @@ -81,40 +75,57 @@ public class SimpleAppRS { tmb.addTriangle(0, 1, 2); tmb.addTriangle(2, 3, 0); + mSimpleMesh = tmb.create(true); + } - Mesh mesh = tmb.create(true); + private void setupRenderables() { + // Built-in shader that provides position, texcoord and normal + VertexShader genericV = SceneManager.getDefaultVS(); + // Built-in shader that displays a color + FragmentShader colorF = SceneManager.getColorFS(); + // Built-in shader that displays a texture + FragmentShader textureF = SceneManager.getTextureFS(); + RenderState colorRS = new RenderState(genericV, colorF, null, null); + ProgramStore alphaBlend = ProgramStore.BLEND_ALPHA_DEPTH_TEST(mRS); + RenderState texRS = new RenderState(genericV, textureF, alphaBlend, null); - Renderable quad = new Renderable(); - quad.setMesh(mesh); - quad.setTransform(new CompoundTransform()); + // Draw a simple colored quad + Renderable quad = mScene.appendNewRenderable(); + quad.setMesh(mSimpleMesh); quad.appendSourceParams(new Float4Param("color", 0.2f, 0.3f, 0.4f)); + quad.setRenderState(colorRS); - mScene.appendRenderable(quad); - geometry.add(quad); + // Draw a textured quad + quad = mScene.appendNewRenderable(); + quad.setMesh(mSimpleMesh); + // Make a transform to position the quad + CompoundTransform t = mScene.appendNewCompoundTransform(); + t.addTranslate("position", new Float3(2, 2, 0)); + quad.setTransform(t); + quad.appendSourceParams(new TextureParam("color", new Texture2D(R.drawable.icon))); + quad.setRenderState(texRS); } private void setupCamera() { - Camera camera = new Camera(); + Camera camera = mScene.appendNewCamera(); camera.setFar(200); camera.setNear(0.1f); camera.setFOV(60); - CompoundTransform cameraTransform = new CompoundTransform(); + CompoundTransform cameraTransform = mScene.appendNewCompoundTransform(); cameraTransform.addTranslate("camera", new Float3(0, 0, 10)); - mScene.appendTransform(cameraTransform); camera.setTransform(cameraTransform); - mScene.appendCamera(camera); } private void setupRenderPass() { - RenderPass mainPass = new RenderPass(); + RenderPass mainPass = mScene.appendNewRenderPass(); mainPass.setClearColor(new Float4(1.0f, 1.0f, 1.0f, 1.0f)); mainPass.setShouldClearColor(true); mainPass.setClearDepth(1.0f); mainPass.setShouldClearDepth(true); mainPass.setCamera(mScene.getCameras().get(0)); - for (Renderable renderable : geometry) { - mainPass.appendRenderable(renderable); + ArrayList allRender = mScene.getRenderables(); + for (RenderableBase renderable : allRender) { + mainPass.appendRenderable((Renderable)renderable); } - mScene.appendRenderPass(mainPass); } } diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/TouchHandler.java b/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/TouchHandler.java index c182c2941e7f6..e272cc58cd6f0 100644 --- a/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/TouchHandler.java +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/TouchHandler.java @@ -48,7 +48,7 @@ public class TouchHandler { mPosValue = new Float3(0, 4, 0); // Make a camera transform we can manipulate - mCameraRig = new CompoundTransform(); + mCameraRig = scene.appendNewCompoundTransform(); mCameraRig.setName("CameraRig"); mPosition = mCameraRig.addTranslate("Position", mPosValue); @@ -56,10 +56,8 @@ public class TouchHandler { mRotateX = mCameraRig.addRotate("RotateX", new Float3(1, 0, 0), mRotateXValue); mDist = mCameraRig.addTranslate("Distance", mDistValue); - scene.appendTransform(mCameraRig); - mCamera = new Camera(); + mCamera = scene.appendNewCamera(); mCamera.setTransform(mCameraRig); - scene.appendCamera(mCamera); } public Camera getCamera() {