TestAppRS.java revision 4bda82de0bca754f3ce387e9968170c5122241a9
1a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk/* 2be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk * Copyright (C) 2011-2012 The Android Open Source Project 3a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * 4a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 5a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * you may not use this file except in compliance with the License. 6a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * You may obtain a copy of the License at 7a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * 8a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 9a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * 10a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 11a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 12a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * See the License for the specific language governing permissions and 14a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * limitations under the License. 15a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk */ 16a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 17d4cb9c587c23e3c24d928b0ac1a4de5679846f93Alex Sakhartchoukpackage com.android.testapp; 18a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 19a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.util.ArrayList; 20a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.util.HashMap; 21a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.util.Map; 22a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.util.Vector; 23a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 24d4cb9c587c23e3c24d928b0ac1a4de5679846f93Alex Sakhartchoukimport com.android.scenegraph.*; 25e57b34155269cc030b4b241f556207f7012a0f07Alex Sakhartchoukimport com.android.scenegraph.SceneManager.SceneLoadedCallback; 26e57b34155269cc030b4b241f556207f7012a0f07Alex Sakhartchouk 27a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.content.res.Resources; 28a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.graphics.Bitmap; 29a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.graphics.BitmapFactory; 30a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.os.AsyncTask; 31a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.*; 32a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Program.TextureType; 33a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.util.Log; 34a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 35006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk// This is where the scenegraph and the rendered objects are initialized and used 363fc86ec3d03bb4a0ae61e41d0cfba43595ecc23dAlex Sakhartchoukpublic class TestAppRS { 37a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 381168868e766f0696c30f644292a5a833ee3983e4Alex Sakhartchouk private static String modelName = "orientation_test.dae"; 393fc86ec3d03bb4a0ae61e41d0cfba43595ecc23dAlex Sakhartchouk private static String TAG = "TestAppRS"; 4018f6419bfe5f2ee11a43713770d17888fd61ed69Alex Sakhartchouk private static String mFilePath = ""; 41a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 42a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk int mWidth; 43a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk int mHeight; 44a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 45a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk boolean mUseBlur; 46a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 47be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk TestAppLoadingScreen mLoadingScreen; 48be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk 49006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk // Used to asynchronously load scene elements like meshes and transform hierarchies 50a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk SceneLoadedCallback mLoadedCallback = new SceneLoadedCallback() { 51a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void run() { 52a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk prepareToRender(mLoadedScene); 53a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 54a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk }; 55a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 56006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk // Top level class that initializes all the elements needed to use the scene graph 57a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk SceneManager mSceneManager; 58a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 59006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk // Used to move the camera around in the 3D world 60a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk TouchHandler mTouchHandler; 61a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 62be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk private Resources mRes; 63be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk private RenderScriptGL mRS; 64be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk 654fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk // Shaders 664fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk private FragmentShader mPaintF; 674fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk private FragmentShader mLightsF; 684fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk private FragmentShader mAluminumF; 694fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk private FragmentShader mPlasticF; 704fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk private FragmentShader mDiffuseF; 714fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk private FragmentShader mTextureF; 724bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk private VertexShader mGenericV; 73be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk 74be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk Scene mActiveScene; 75be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk 76006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk // This is a part of the test app, it's used to tests multiple render passes and is toggled 77006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk // on and off in the menu, off by default 78a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk void toggleBlur() { 79a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mUseBlur = !mUseBlur; 80a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 81a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.clearRenderPasses(); 82a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk initRenderPasses(); 83a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.initRenderPassRS(mRS, mSceneManager); 84006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk 85006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk // This is just a hardcoded object in the scene that gets turned on and off for the demo 86006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk // to make things look a bit better. This could be deleted in the cleanup 87684267525b349eb12f4e31d88061c51115678decAlex Sakhartchouk Renderable plane = (Renderable)mActiveScene.getRenderableByName("pPlaneShape1"); 88a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (plane != null) { 89a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk plane.setVisible(mRS, !mUseBlur); 90a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 91a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 92a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 93a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void init(RenderScriptGL rs, Resources res, int width, int height) { 944bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk mUseBlur = false; 95a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRS = rs; 96a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRes = res; 97a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mWidth = width; 98a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mHeight = height; 99a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 100a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTouchHandler = new TouchHandler(); 101a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 10261440e8a8bc5d0d3c7edc66eccb609e5f07fea6eAlex Sakhartchouk mSceneManager = SceneManager.getInstance(); 10318f6419bfe5f2ee11a43713770d17888fd61ed69Alex Sakhartchouk // Initializes all the RS specific scenegraph elements 104a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mSceneManager.initRS(mRS, mRes, mWidth, mHeight); 105a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 106be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk mLoadingScreen = new TestAppLoadingScreen(mRS, mRes); 107a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 108006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk // Initi renderscript stuff specific to the app. This will need to be abstracted out later. 1094bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk FullscreenBlur.createRenderTargets(mRS, mWidth, mHeight); 1104bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk initPaintShaders(); 1114bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk mLoadingScreen.setRenderLoop(mSceneManager.getRenderLoop()); 112a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 113006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk // Load a scene to render 11418f6419bfe5f2ee11a43713770d17888fd61ed69Alex Sakhartchouk mSceneManager.loadModel(mFilePath + modelName, mLoadedCallback); 115a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 116a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 117006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk // When a new model file is selected from the UI, this function gets called to init everything 118a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk void loadModel(String path) { 119be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk mLoadingScreen.showLoadingScreen(true); 1204bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk mActiveScene.destroyRS(); 1211168868e766f0696c30f644292a5a833ee3983e4Alex Sakhartchouk mSceneManager.loadModel(path, mLoadedCallback); 122a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 123a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 124a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void onActionDown(float x, float y) { 125a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTouchHandler.onActionDown(x, y); 126a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 127a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 128a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void onActionScale(float scale) { 129a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTouchHandler.onActionScale(scale); 130a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 131a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 132a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void onActionMove(float x, float y) { 133a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTouchHandler.onActionMove(x, y); 134a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 135a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 1364bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk FragmentShader createFromResource(int id, boolean addCubemap, Type constType) { 1374fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk FragmentShader.Builder fb = new FragmentShader.Builder(mRS); 1384bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk fb.setShaderConst(constType); 139b98f6d3466f15a250e4f2851bbae16c66b014cf1Alex Sakhartchouk fb.setShader(mRes, id); 1404fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk fb.addTexture(TextureType.TEXTURE_2D, "diffuse"); 141b98f6d3466f15a250e4f2851bbae16c66b014cf1Alex Sakhartchouk if (addCubemap) { 14299b93819f12f18b8559f702d7a303c31fe05205aAlex Sakhartchouk fb.addShaderTexture(TextureType.TEXTURE_CUBE, "reflection"); 143b98f6d3466f15a250e4f2851bbae16c66b014cf1Alex Sakhartchouk } 1444fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk FragmentShader pf = fb.create(); 145d4cb9c587c23e3c24d928b0ac1a4de5679846f93Alex Sakhartchouk pf.getProgram().bindSampler(Sampler.WRAP_LINEAR_MIP_LINEAR(mRS), 0); 146b98f6d3466f15a250e4f2851bbae16c66b014cf1Alex Sakhartchouk if (addCubemap) { 147d4cb9c587c23e3c24d928b0ac1a4de5679846f93Alex Sakhartchouk pf.getProgram().bindSampler(Sampler.CLAMP_LINEAR_MIP_LINEAR(mRS), 1); 148b98f6d3466f15a250e4f2851bbae16c66b014cf1Alex Sakhartchouk } 149b98f6d3466f15a250e4f2851bbae16c66b014cf1Alex Sakhartchouk return pf; 150b98f6d3466f15a250e4f2851bbae16c66b014cf1Alex Sakhartchouk } 151b98f6d3466f15a250e4f2851bbae16c66b014cf1Alex Sakhartchouk 152a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private void initPaintShaders() { 1534bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk ScriptField_ModelParams objConst = new ScriptField_ModelParams(mRS, 1); 1544bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk ScriptField_ViewProjParams shaderConst = new ScriptField_ViewProjParams(mRS, 1); 1554fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 1564fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk VertexShader.Builder vb = new VertexShader.Builder(mRS); 1574bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk vb.addInput(ScriptField_VertexShaderInputs.createElement(mRS)); 158a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk vb.setShader(mRes, R.raw.shader2v); 1594fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk vb.setObjectConst(objConst.getAllocation().getType()); 1604fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk vb.setShaderConst(shaderConst.getAllocation().getType()); 1614bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk mGenericV = vb.create(); 1624bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk 1634bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk ScriptField_CameraParams fsConst = new ScriptField_CameraParams(mRS, 1); 1644bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk ScriptField_LightParams fsConst2 = new ScriptField_LightParams(mRS, 1); 165a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 1664bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk mPaintF = createFromResource(R.raw.paintf, true, fsConst.getAllocation().getType()); 1674bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk // Assign a reflection map 1684bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk TextureCube envCube = new TextureCube("sdcard/scenegraph/", "cube_env.png"); 1694bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk mPaintF.appendSourceParams(new TextureParam("reflection", envCube)); 170a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 1714bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk mAluminumF = createFromResource(R.raw.metal, true, fsConst.getAllocation().getType()); 1724bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk TextureCube diffCube = new TextureCube("sdcard/scenegraph/", "cube_spec.png"); 1734bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk mAluminumF.appendSourceParams(new TextureParam("reflection", diffCube)); 174a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 1754bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk mPlasticF = createFromResource(R.raw.plastic, false, fsConst.getAllocation().getType()); 1764bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk mDiffuseF = createFromResource(R.raw.diffuse, false, fsConst.getAllocation().getType()); 1774bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk mTextureF = createFromResource(R.raw.texture, false, fsConst.getAllocation().getType()); 178a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 1794fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk FragmentShader.Builder fb = new FragmentShader.Builder(mRS); 1804bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk fb.setObjectConst(fsConst2.getAllocation().getType()); 18161440e8a8bc5d0d3c7edc66eccb609e5f07fea6eAlex Sakhartchouk fb.setShader(mRes, R.raw.plastic_lights); 1824fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mLightsF = fb.create(); 1831e69f42fa2332496943cf66ee047a107e882240dAlex Sakhartchouk 1841e69f42fa2332496943cf66ee047a107e882240dAlex Sakhartchouk FullscreenBlur.initShaders(mRes, mRS); 185a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 186a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 187a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk void initRenderPasses() { 188684267525b349eb12f4e31d88061c51115678decAlex Sakhartchouk ArrayList<RenderableBase> allDraw = mActiveScene.getRenderables(); 189a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk int numDraw = allDraw.size(); 190a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 191a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (mUseBlur) { 192ce047cb47b761f00593f247a3901fe8155371d47Alex Sakhartchouk FullscreenBlur.addBlurPasses(mActiveScene, mRS); 193a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 194a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 195a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderPass mainPass = new RenderPass(); 196a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mainPass.setClearColor(new Float4(1.0f, 1.0f, 1.0f, 1.0f)); 197a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mainPass.setShouldClearColor(true); 198a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mainPass.setClearDepth(1.0f); 199a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mainPass.setShouldClearDepth(true); 200a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mainPass.setCamera(mActiveScene.getCameras().get(1)); 201a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk for (int i = 0; i < numDraw; i ++) { 202684267525b349eb12f4e31d88061c51115678decAlex Sakhartchouk mainPass.appendRenderable((Renderable)allDraw.get(i)); 203a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 204a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.appendRenderPass(mainPass); 205a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 206a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (mUseBlur) { 207ce047cb47b761f00593f247a3901fe8155371d47Alex Sakhartchouk FullscreenBlur.addCompositePass(mActiveScene, mRS); 208a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 209a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 210a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 2114fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk private void addShadersToScene() { 2124fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mActiveScene.appendShader(mPaintF); 2134fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mActiveScene.appendShader(mLightsF); 2144fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mActiveScene.appendShader(mAluminumF); 2154fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mActiveScene.appendShader(mPlasticF); 2164fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mActiveScene.appendShader(mDiffuseF); 2174fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mActiveScene.appendShader(mTextureF); 2184bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk mActiveScene.appendShader(mGenericV); 2194fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk } 2204fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 221a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void prepareToRender(Scene s) { 22261440e8a8bc5d0d3c7edc66eccb609e5f07fea6eAlex Sakhartchouk mSceneManager.setActiveScene(s); 223a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene = s; 2244fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk addShadersToScene(); 2254bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk RenderState plastic = new RenderState(mGenericV, mPlasticF, null, null); 2264bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk RenderState diffuse = new RenderState(mGenericV, mDiffuseF, null, null); 2274bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk RenderState paint = new RenderState(mGenericV, mPaintF, null, null); 2284bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk RenderState aluminum = new RenderState(mGenericV, mAluminumF, null, null); 2294bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk RenderState lights = new RenderState(mGenericV, mLightsF, null, null); 2304bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk RenderState glassTransp = new RenderState(mGenericV, mPaintF, 2314fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk ProgramStore.BLEND_ALPHA_DEPTH_TEST(mRS), null); 232a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 233a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk initRenderPasses(); 234a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 235a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.assignRenderState(plastic); 236a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 237a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(diffuse, "lambert2$"); 238a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 239a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(paint, "^Paint"); 240a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(paint, "^Carbon"); 241a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(paint, "^Glass"); 242a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(paint, "^MainGlass"); 243a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 244a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(aluminum, "^Metal"); 245a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(aluminum, "^Brake"); 246a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 247a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(glassTransp, "^GlassLight"); 248a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 249a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(lights, "^LightBlinn"); 25061440e8a8bc5d0d3c7edc66eccb609e5f07fea6eAlex Sakhartchouk 251684267525b349eb12f4e31d88061c51115678decAlex Sakhartchouk Renderable plane = (Renderable)mActiveScene.getRenderableByName("pPlaneShape1"); 252a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (plane != null) { 2534bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk RenderState texState = new RenderState(mGenericV, mTextureF, null, null); 254a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk plane.setRenderState(texState); 255a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk plane.setVisible(mRS, !mUseBlur); 256a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 257a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 258a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTouchHandler.init(mActiveScene); 259a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 260a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk long start = System.currentTimeMillis(); 261a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.initRS(mRS, mRes, mSceneManager); 262a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk long end = System.currentTimeMillis(); 263a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Log.v("TIMER", "Scene init time: " + (end - start)); 264a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 265be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk mLoadingScreen.showLoadingScreen(false); 266a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 267a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk} 268