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; 68b23b58ad343ccbf8835c7067698a60fc6bc1a870Alex Sakhartchouk private FragmentShader mLightsDiffF; 694fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk private FragmentShader mAluminumF; 704fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk private FragmentShader mPlasticF; 714fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk private FragmentShader mDiffuseF; 724fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk private FragmentShader mTextureF; 734bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk private VertexShader mGenericV; 74be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk 75be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk Scene mActiveScene; 76be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk 77006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk // This is a part of the test app, it's used to tests multiple render passes and is toggled 78006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk // on and off in the menu, off by default 79a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk void toggleBlur() { 80a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mUseBlur = !mUseBlur; 81a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 82a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.clearRenderPasses(); 83a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk initRenderPasses(); 84a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.initRenderPassRS(mRS, mSceneManager); 85006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk 86006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk // This is just a hardcoded object in the scene that gets turned on and off for the demo 87006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk // to make things look a bit better. This could be deleted in the cleanup 88684267525b349eb12f4e31d88061c51115678decAlex Sakhartchouk Renderable plane = (Renderable)mActiveScene.getRenderableByName("pPlaneShape1"); 89a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (plane != null) { 90e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk plane.setVisible(!mUseBlur); 91a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 92a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 93a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 94a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void init(RenderScriptGL rs, Resources res, int width, int height) { 954bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk mUseBlur = false; 96a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRS = rs; 97a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRes = res; 98a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mWidth = width; 99a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mHeight = height; 100a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 101a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTouchHandler = new TouchHandler(); 102a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 10361440e8a8bc5d0d3c7edc66eccb609e5f07fea6eAlex Sakhartchouk mSceneManager = SceneManager.getInstance(); 10418f6419bfe5f2ee11a43713770d17888fd61ed69Alex Sakhartchouk // Initializes all the RS specific scenegraph elements 105a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mSceneManager.initRS(mRS, mRes, mWidth, mHeight); 106a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 107be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk mLoadingScreen = new TestAppLoadingScreen(mRS, mRes); 108a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 109006ecdcf16a5446adb781e55d65ed22469bbed47Alex Sakhartchouk // Initi renderscript stuff specific to the app. This will need to be abstracted out later. 1104bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk FullscreenBlur.createRenderTargets(mRS, mWidth, mHeight); 1114bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk initPaintShaders(); 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() { 153c71343acc469db7ec351db2344032801e0e1b30aAlex Sakhartchouk mGenericV = SceneManager.getDefaultVS(); 1544fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 155c71343acc469db7ec351db2344032801e0e1b30aAlex Sakhartchouk ScriptField_CameraParams camParams = new ScriptField_CameraParams(mRS, 1); 156c71343acc469db7ec351db2344032801e0e1b30aAlex Sakhartchouk Type camParamType = camParams.getAllocation().getType(); 157c71343acc469db7ec351db2344032801e0e1b30aAlex Sakhartchouk ScriptField_LightParams lightParams = new ScriptField_LightParams(mRS, 1); 1584bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk 159c71343acc469db7ec351db2344032801e0e1b30aAlex Sakhartchouk mPaintF = createFromResource(R.raw.paintf, true, camParamType); 1604bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk // Assign a reflection map 1614bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk TextureCube envCube = new TextureCube("sdcard/scenegraph/", "cube_env.png"); 1624bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk mPaintF.appendSourceParams(new TextureParam("reflection", envCube)); 163a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 164c71343acc469db7ec351db2344032801e0e1b30aAlex Sakhartchouk mAluminumF = createFromResource(R.raw.metal, true, camParamType); 1654bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk TextureCube diffCube = new TextureCube("sdcard/scenegraph/", "cube_spec.png"); 1664bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk mAluminumF.appendSourceParams(new TextureParam("reflection", diffCube)); 167a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 168c71343acc469db7ec351db2344032801e0e1b30aAlex Sakhartchouk mPlasticF = createFromResource(R.raw.plastic, false, camParamType); 169c71343acc469db7ec351db2344032801e0e1b30aAlex Sakhartchouk mDiffuseF = createFromResource(R.raw.diffuse, false, camParamType); 170c71343acc469db7ec351db2344032801e0e1b30aAlex Sakhartchouk mTextureF = SceneManager.getTextureFS(); 171a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 1724fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk FragmentShader.Builder fb = new FragmentShader.Builder(mRS); 173c71343acc469db7ec351db2344032801e0e1b30aAlex Sakhartchouk fb.setObjectConst(lightParams.getAllocation().getType()); 17461440e8a8bc5d0d3c7edc66eccb609e5f07fea6eAlex Sakhartchouk fb.setShader(mRes, R.raw.plastic_lights); 1754fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mLightsF = fb.create(); 1761e69f42fa2332496943cf66ee047a107e882240dAlex Sakhartchouk 177b23b58ad343ccbf8835c7067698a60fc6bc1a870Alex Sakhartchouk fb = new FragmentShader.Builder(mRS); 178b23b58ad343ccbf8835c7067698a60fc6bc1a870Alex Sakhartchouk fb.setObjectConst(lightParams.getAllocation().getType()); 179b23b58ad343ccbf8835c7067698a60fc6bc1a870Alex Sakhartchouk fb.setShader(mRes, R.raw.diffuse_lights); 180b23b58ad343ccbf8835c7067698a60fc6bc1a870Alex Sakhartchouk mLightsDiffF = fb.create(); 181b23b58ad343ccbf8835c7067698a60fc6bc1a870Alex Sakhartchouk 1821e69f42fa2332496943cf66ee047a107e882240dAlex Sakhartchouk FullscreenBlur.initShaders(mRes, mRS); 183a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 184a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 185a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk void initRenderPasses() { 186684267525b349eb12f4e31d88061c51115678decAlex Sakhartchouk ArrayList<RenderableBase> allDraw = mActiveScene.getRenderables(); 187a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk int numDraw = allDraw.size(); 188a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 189a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (mUseBlur) { 1906f31c36a3dbe5e61644ec39c4fcad0284d50e4f1Alex Sakhartchouk FullscreenBlur.addBlurPasses(mActiveScene, mRS, mTouchHandler.getCamera()); 191a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 192a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 193a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderPass mainPass = new RenderPass(); 194a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mainPass.setClearColor(new Float4(1.0f, 1.0f, 1.0f, 1.0f)); 195a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mainPass.setShouldClearColor(true); 196a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mainPass.setClearDepth(1.0f); 197a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mainPass.setShouldClearDepth(true); 1986f31c36a3dbe5e61644ec39c4fcad0284d50e4f1Alex Sakhartchouk mainPass.setCamera(mTouchHandler.getCamera()); 199a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk for (int i = 0; i < numDraw; i ++) { 200684267525b349eb12f4e31d88061c51115678decAlex Sakhartchouk mainPass.appendRenderable((Renderable)allDraw.get(i)); 201a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 202a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.appendRenderPass(mainPass); 203a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 204a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (mUseBlur) { 2056f31c36a3dbe5e61644ec39c4fcad0284d50e4f1Alex Sakhartchouk FullscreenBlur.addCompositePass(mActiveScene, mRS, mTouchHandler.getCamera()); 206a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 207a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 208a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 2094fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk private void addShadersToScene() { 2104fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mActiveScene.appendShader(mPaintF); 2114fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mActiveScene.appendShader(mLightsF); 212b23b58ad343ccbf8835c7067698a60fc6bc1a870Alex Sakhartchouk mActiveScene.appendShader(mLightsDiffF); 2134fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mActiveScene.appendShader(mAluminumF); 2144fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mActiveScene.appendShader(mPlasticF); 2154fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mActiveScene.appendShader(mDiffuseF); 2164fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mActiveScene.appendShader(mTextureF); 2174fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk } 2184fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 219a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void prepareToRender(Scene s) { 22061440e8a8bc5d0d3c7edc66eccb609e5f07fea6eAlex Sakhartchouk mSceneManager.setActiveScene(s); 221a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene = s; 2226f31c36a3dbe5e61644ec39c4fcad0284d50e4f1Alex Sakhartchouk mTouchHandler.init(mActiveScene); 2234fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk addShadersToScene(); 2244bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk RenderState plastic = new RenderState(mGenericV, mPlasticF, null, null); 2254bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk RenderState diffuse = new RenderState(mGenericV, mDiffuseF, null, null); 2264bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk RenderState paint = new RenderState(mGenericV, mPaintF, null, null); 2274bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk RenderState aluminum = new RenderState(mGenericV, mAluminumF, null, null); 2284bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk RenderState lights = new RenderState(mGenericV, mLightsF, null, null); 229b23b58ad343ccbf8835c7067698a60fc6bc1a870Alex Sakhartchouk RenderState diff_lights = new RenderState(mGenericV, mLightsDiffF, null, null); 230b23b58ad343ccbf8835c7067698a60fc6bc1a870Alex Sakhartchouk RenderState diff_lights_no_cull = new RenderState(mGenericV, mLightsDiffF, null, 231b23b58ad343ccbf8835c7067698a60fc6bc1a870Alex Sakhartchouk ProgramRaster.CULL_NONE(mRS)); 2324bda82de0bca754f3ce387e9968170c5122241a9Alex Sakhartchouk RenderState glassTransp = new RenderState(mGenericV, mPaintF, 2334fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk ProgramStore.BLEND_ALPHA_DEPTH_TEST(mRS), null); 234b23b58ad343ccbf8835c7067698a60fc6bc1a870Alex Sakhartchouk RenderState texState = new RenderState(mGenericV, mTextureF, null, null); 235a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 236a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk initRenderPasses(); 237a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 238a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.assignRenderState(plastic); 239a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 240a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(diffuse, "lambert2$"); 241a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 242a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(paint, "^Paint"); 243a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(paint, "^Carbon"); 244a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(paint, "^Glass"); 245a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(paint, "^MainGlass"); 246a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 247a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(aluminum, "^Metal"); 248a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(aluminum, "^Brake"); 249a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 250a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(glassTransp, "^GlassLight"); 251a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 252a18d676edefbafc0b745ab98edab8f50b1c81c61Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(lights, "^LightBlinn"); 253b23b58ad343ccbf8835c7067698a60fc6bc1a870Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(diff_lights, "^LightLambert"); 254b23b58ad343ccbf8835c7067698a60fc6bc1a870Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(diff_lights_no_cull, "^LightLambertNoCull"); 255b23b58ad343ccbf8835c7067698a60fc6bc1a870Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(texState, "^TextureOnly"); 25661440e8a8bc5d0d3c7edc66eccb609e5f07fea6eAlex Sakhartchouk 257684267525b349eb12f4e31d88061c51115678decAlex Sakhartchouk Renderable plane = (Renderable)mActiveScene.getRenderableByName("pPlaneShape1"); 258a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (plane != null) { 259a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk plane.setRenderState(texState); 260e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk plane.setVisible(!mUseBlur); 261a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 262a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 263a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk long start = System.currentTimeMillis(); 264e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk mActiveScene.initRS(); 265a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk long end = System.currentTimeMillis(); 266a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Log.v("TIMER", "Scene init time: " + (end - start)); 267a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 268be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk mLoadingScreen.showLoadingScreen(false); 269a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 270a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk} 271