TestAppRS.java revision a7a211b8a68a7d3f5ff4409aa286db07f96c0550
1a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk/* 2a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * Copyright (C) 2011 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 17a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukpackage com.android.scenegraph; 18a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 19a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.io.File; 20a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.io.IOException; 21a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.io.InputStream; 22a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.io.FileInputStream; 23a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.io.BufferedInputStream; 24a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.io.Writer; 25a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.util.ArrayList; 26a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.util.HashMap; 27a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.util.Map; 28a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.util.Vector; 29a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 30a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.content.res.Resources; 31a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.graphics.Bitmap; 32a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.graphics.BitmapFactory; 33a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.os.AsyncTask; 34a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.*; 35a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Allocation.MipmapControl; 36a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Element.Builder; 37a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Font.Style; 38a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Program.TextureType; 39a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.ProgramStore.DepthFunc; 40a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.util.Log; 41a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 42a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport com.android.scenegraph.SceneManager.SceneLoadedCallback; 43a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 44a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukpublic class SceneGraphRS { 45a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 46a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private static String modelName = "orientation_test"; 47a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private static String TAG = "SceneGraphRS"; 48a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private final int STATE_LAST_FOCUS = 1; 49a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private final boolean mLoadFromSD = true; 50a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private static String mSDCardPath = "sdcard/scenegraph/"; 51a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 52a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk int mWidth; 53a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk int mHeight; 54a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk int mRotation; 55a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 56a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk boolean mUseBlur; 57a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 58a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk SceneLoadedCallback mLoadedCallback = new SceneLoadedCallback() { 59a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void run() { 60a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk prepareToRender(mLoadedScene); 61a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 62a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk }; 63a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 64a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk SceneManager mSceneManager; 65a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 66a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk TouchHandler mTouchHandler; 67a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 68a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public SceneGraphRS() { 69a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mUseBlur = false; 70a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 71a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 72a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk void toggleBlur() { 73a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mUseBlur = !mUseBlur; 74a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 75a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.clearRenderPasses(); 76a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk initRenderPasses(); 77a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.initRenderPassRS(mRS, mSceneManager); 78a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Drawable plane = (Drawable)mActiveScene.getDrawableByName("pPlaneShape1"); 79a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (plane != null) { 80a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk plane.setVisible(mRS, !mUseBlur); 81a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 82a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 83a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 84a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void init(RenderScriptGL rs, Resources res, int width, int height) { 85a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRS = rs; 86a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRes = res; 87a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mWidth = width; 88a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mHeight = height; 89a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRotation = 0; 90a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 91a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTouchHandler = new TouchHandler(); 92a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 93a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mSceneManager = new SceneManager(); 94a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mSceneManager.initRS(mRS, mRes, mWidth, mHeight); 95a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 96a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk renderLoading(); 97a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 98a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk new LoadingScreenLoaderTask().execute(); 99a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 100a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk initRS(); 101a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 102a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mSceneManager.loadModel(modelName, mLoadedCallback); 103a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 104a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 105a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk void loadModel(String path) { 106a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk String shortName = path.substring(path.lastIndexOf('/') + 1); 107a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk shortName = shortName.substring(0, shortName.lastIndexOf('.')); 108a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mScript.set_gInitialized(false); 109a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.destroyRS(mSceneManager); 110a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mSceneManager.loadModel(shortName, mLoadedCallback); 111a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 112a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 113a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private Resources mRes; 114a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private RenderScriptGL mRS; 115a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private Sampler mSampler; 116a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private ProgramStore mPSBackground; 117a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private ProgramFragment mPFBackground; 118a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private ProgramVertex mPVBackground; 119a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private ProgramVertexFixedFunction.Constants mPVA; 120a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 121a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private ProgramFragment mPF_Paint; 122a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private ProgramFragment mPF_Aluminum; 123a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private ProgramFragment mPF_Plastic; 124a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private ProgramFragment mPF_Diffuse; 125a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private ProgramFragment mPF_BlurH; 126a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private ProgramFragment mPF_BlurV; 127a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private ProgramFragment mPF_SelectColor; 128a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private ProgramFragment mPF_Texture; 129a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ScriptField_FShaderParams_s mFsConst; 130a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ScriptField_FBlurOffsets_s mFsBlurHConst; 131a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ScriptField_FBlurOffsets_s mFsBlurVConst; 132a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private ProgramVertex mPV_Paint; 133a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ScriptField_VShaderParams_s mVsConst; 134a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private ProgramVertex mPV_Blur; 135a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 136a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private Allocation mDefaultCube; 137a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private Allocation mAllocPV; 138a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private Allocation mEnvCube; 139a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private Allocation mDiffCube; 140a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 141a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private Allocation mRenderTargetBlur0Color; 142a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private Allocation mRenderTargetBlur0Depth; 143a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private Allocation mRenderTargetBlur1Color; 144a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private Allocation mRenderTargetBlur1Depth; 145a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private Allocation mRenderTargetBlur2Color; 146a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private Allocation mRenderTargetBlur2Depth; 147a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 148a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Scene mActiveScene; 149a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 150a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private ScriptC_scenegraph mScript; 151a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 152a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private class LoadingScreenLoaderTask extends AsyncTask<String, Void, Boolean> { 153a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation robotTex; 154a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Mesh robotMesh; 155a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk protected Boolean doInBackground(String... names) { 156a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk long start = System.currentTimeMillis(); 157a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk robotTex = Allocation.createFromBitmapResource(mRS, mRes, R.drawable.robot, 158a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, 159a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation.USAGE_GRAPHICS_TEXTURE); 160a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 161a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk FileA3D model = FileA3D.createFromResource(mRS, mRes, R.raw.robot); 162a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk FileA3D.IndexEntry entry = model.getIndexEntry(0); 163a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (entry != null && entry.getEntryType() == FileA3D.EntryType.MESH) { 164a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk robotMesh = entry.getMesh(); 165a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 166a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 167a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk initPFS(); 168a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk initPF(); 169a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk initPV(); 170a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 171a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk long end = System.currentTimeMillis(); 172a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Log.v("TIMER", "Loading load time: " + (end - start)); 173a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return new Boolean(true); 174a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 175a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 176a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk protected void onPostExecute(Boolean result) { 177a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mScript.set_gRobotTex(robotTex); 178a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mScript.set_gRobotMesh(robotMesh); 179a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 180a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 181a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 182a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 183a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private class ImageLoaderTask extends AsyncTask<String, Void, Boolean> { 184a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation tempEnv; 185a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation tempDiff; 186a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 187a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk InputStream openStream(String name) { 188a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk InputStream is = null; 189a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk try { 190a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (!mLoadFromSD) { 191a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk is = mRes.getAssets().open(name); 192a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } else { 193a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk File f = new File(mSDCardPath + name); 194a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk is = new BufferedInputStream(new FileInputStream(f)); 195a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 196a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } catch (IOException e) { 197a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Log.e("PAINTSHADERS", " Message: " + e.getMessage()); 198a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 199a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return is; 200a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 201a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 202a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk protected Boolean doInBackground(String... names) { 203a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk long start = System.currentTimeMillis(); 204a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk InputStream is = openStream("cube_env.png"); 205a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (is == null) { 206a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return new Boolean(false); 207a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 208a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 209a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Bitmap b = BitmapFactory.decodeStream(is); 210a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk tempEnv = Allocation.createCubemapFromBitmap(mRS, 211a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk b, 212a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, 213a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation.USAGE_GRAPHICS_TEXTURE); 214a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 215a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk is = openStream("cube_spec.png"); 216a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (is == null) { 217a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return new Boolean(false); 218a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 219a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 220a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk b = BitmapFactory.decodeStream(is); 221a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk tempDiff = Allocation.createCubemapFromBitmap(mRS, 222a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk b, 223a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, 224a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation.USAGE_GRAPHICS_TEXTURE); 225a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk long end = System.currentTimeMillis(); 226a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Log.v("TIMER", "Image load time: " + (end - start)); 227a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return new Boolean(true); 228a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 229a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 230a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk protected void onPostExecute(Boolean result) { 231a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mEnvCube = tempEnv; 232a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mDiffCube = tempDiff; 233a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 234a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Paint.bindTexture(mEnvCube, 1); 235a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Aluminum.bindTexture(mDiffCube, 1); 236a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 237a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 238a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 239a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void onActionDown(float x, float y) { 240a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTouchHandler.onActionDown(x, y); 241a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 242a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk //mSceneManager.getRenderLoop().invoke_pick((int)x, (int)y); 243a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 244a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 245a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void onActionScale(float scale) { 246a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTouchHandler.onActionScale(scale); 247a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 248a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 249a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void onActionMove(float x, float y) { 250a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTouchHandler.onActionMove(x, y); 251a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 252a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 253a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private void initPaintShaders() { 254a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramVertex.Builder vb = new ProgramVertex.Builder(mRS); 255a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mVsConst = new ScriptField_VShaderParams_s(mRS, 1); 256a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk vb.addConstant(mVsConst.getAllocation().getType()); 257a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk vb.addInput(ScriptField_VertexShaderInputs_s.createElement(mRS)); 258a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk vb.setShader(mRes, R.raw.shader2v); 259a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPV_Paint = vb.create(); 260a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPV_Paint.bindConstants(mVsConst.getAllocation(), 0); 261a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 262a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk vb = new ProgramVertex.Builder(mRS); 263a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk vb.addConstant(mVsConst.getAllocation().getType()); 264a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk vb.addInput(ScriptField_VertexShaderInputs_s.createElement(mRS)); 265a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk vb.setShader(mRes, R.raw.blur_vertex); 266a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPV_Blur = vb.create(); 267a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPV_Blur.bindConstants(mVsConst.getAllocation(), 0); 268a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 269a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramFragment.Builder fb = new ProgramFragment.Builder(mRS); 270a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mFsConst = new ScriptField_FShaderParams_s(mRS, 1); 271a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addConstant(mFsConst.getAllocation().getType()); 272a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.setShader(mRes, R.raw.paintf); 273a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addTexture(TextureType.TEXTURE_2D); 274a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addTexture(TextureType.TEXTURE_CUBE); 275a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Paint = fb.create(); 276a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 277a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Paint.bindConstants(mFsConst.getAllocation(), 0); 278a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Paint.bindSampler(Sampler.WRAP_LINEAR_MIP_LINEAR(mRS), 0); 279a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Paint.bindSampler(Sampler.CLAMP_LINEAR_MIP_LINEAR(mRS), 1); 280a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 281a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb = new ProgramFragment.Builder(mRS); 282a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addConstant(mFsConst.getAllocation().getType()); 283a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.setShader(mRes, R.raw.metal); 284a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addTexture(TextureType.TEXTURE_2D); 285a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addTexture(TextureType.TEXTURE_CUBE); 286a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Aluminum = fb.create(); 287a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 288a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Aluminum.bindConstants(mFsConst.getAllocation(), 0); 289a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Aluminum.bindSampler(Sampler.WRAP_LINEAR_MIP_LINEAR(mRS), 0); 290a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Aluminum.bindSampler(Sampler.CLAMP_LINEAR_MIP_LINEAR(mRS), 1); 291a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 292a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb = new ProgramFragment.Builder(mRS); 293a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addConstant(mFsConst.getAllocation().getType()); 294a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.setShader(mRes, R.raw.plastic); 295a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addTexture(TextureType.TEXTURE_2D); 296a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Plastic = fb.create(); 297a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Plastic.bindConstants(mFsConst.getAllocation(), 0); 298a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Plastic.bindSampler(Sampler.WRAP_LINEAR_MIP_LINEAR(mRS), 0); 299a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 300a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb = new ProgramFragment.Builder(mRS); 301a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addConstant(mFsConst.getAllocation().getType()); 302a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.setShader(mRes, R.raw.diffuse); 303a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addTexture(TextureType.TEXTURE_2D); 304a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Diffuse = fb.create(); 305a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Diffuse.bindConstants(mFsConst.getAllocation(), 0); 306a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Diffuse.bindSampler(Sampler.WRAP_LINEAR_MIP_LINEAR(mRS), 0); 307a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 308a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb = new ProgramFragment.Builder(mRS); 309a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addConstant(mFsConst.getAllocation().getType()); 310a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.setShader(mRes, R.raw.texture); 311a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addTexture(TextureType.TEXTURE_2D); 312a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Texture = fb.create(); 313a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Texture.bindConstants(mFsConst.getAllocation(), 0); 314a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Texture.bindSampler(Sampler.WRAP_LINEAR_MIP_LINEAR(mRS), 0); 315a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 316a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mFsBlurHConst = new ScriptField_FBlurOffsets_s(mRS, 1); 317a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk float xAdvance = 1.0f / (float)mRenderTargetBlur0Color.getType().getX(); 318a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ScriptField_FBlurOffsets_s.Item item = new ScriptField_FBlurOffsets_s.Item(); 319a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk item.blurOffset0 = - xAdvance * 2.5f; 320a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk item.blurOffset1 = - xAdvance * 0.5f; 321a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk item.blurOffset2 = xAdvance * 1.5f; 322a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk item.blurOffset3 = xAdvance * 3.5f; 323a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mFsBlurHConst.set(item, 0, true); 324a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 325a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb = new ProgramFragment.Builder(mRS); 326a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addConstant(mFsBlurHConst.getAllocation().getType()); 327a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.setShader(mRes, R.raw.blur_h); 328a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addTexture(TextureType.TEXTURE_2D); 329a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_BlurH = fb.create(); 330a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_BlurH.bindConstants(mFsBlurHConst.getAllocation(), 0); 331a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_BlurH.bindTexture(mRenderTargetBlur0Color, 0); 332a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_BlurH.bindSampler(Sampler.CLAMP_LINEAR(mRS), 0); 333a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 334a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mFsBlurVConst = new ScriptField_FBlurOffsets_s(mRS, 1); 335a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk float yAdvance = 1.0f / (float)mRenderTargetBlur0Color.getType().getY(); 336a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk item.blurOffset0 = - yAdvance * 2.5f; 337a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk item.blurOffset1 = - yAdvance * 0.5f; 338a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk item.blurOffset2 = yAdvance * 1.5f; 339a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk item.blurOffset3 = yAdvance * 3.5f; 340a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mFsBlurVConst.set(item, 0, true); 341a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 342a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb = new ProgramFragment.Builder(mRS); 343a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addConstant(mFsBlurVConst.getAllocation().getType()); 344a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.setShader(mRes, R.raw.blur_v); 345a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addTexture(TextureType.TEXTURE_2D); 346a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_BlurV = fb.create(); 347a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_BlurV.bindConstants(mFsBlurVConst.getAllocation(), 0); 348a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_BlurV.bindTexture(mRenderTargetBlur1Color, 0); 349a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_BlurV.bindSampler(Sampler.CLAMP_LINEAR(mRS), 0); 350a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 351a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb = new ProgramFragment.Builder(mRS); 352a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk //fb.addConstant(mFsBlurVConst.getAllocation().getType()); 353a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.setShader(mRes, R.raw.select_color); 354a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fb.addTexture(TextureType.TEXTURE_2D); 355a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_SelectColor = fb.create(); 356a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk //mPF_SelectColor.bindConstants(mFsBlurVConst.getAllocation(), 0); 357a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk //mPF_SelectColor.bindTexture(mRenderTargetBlur1Color, 0); 358a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_SelectColor.bindSampler(Sampler.CLAMP_LINEAR(mRS), 0); 359a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 360a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 361a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private void initPFS() { 362a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramStore.Builder b = new ProgramStore.Builder(mRS); 363a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 364a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk b.setDepthFunc(ProgramStore.DepthFunc.LESS); 365a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk b.setDitherEnabled(false); 366a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk b.setDepthMaskEnabled(true); 367a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPSBackground = b.create(); 368a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 369a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mScript.set_gPFSBackground(mPSBackground); 370a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 371a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 372a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private void initPF() { 373a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Sampler.Builder bs = new Sampler.Builder(mRS); 374a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk bs.setMinification(Sampler.Value.LINEAR); 375a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk bs.setMagnification(Sampler.Value.LINEAR); 376a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk bs.setWrapS(Sampler.Value.CLAMP); 377a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk bs.setWrapT(Sampler.Value.CLAMP); 378a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mSampler = bs.create(); 379a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 380a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramFragmentFixedFunction.Builder b = new ProgramFragmentFixedFunction.Builder(mRS); 381a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk b.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE, 382a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramFragmentFixedFunction.Builder.Format.RGBA, 0); 383a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPFBackground = b.create(); 384a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPFBackground.bindSampler(Sampler.CLAMP_LINEAR(mRS), 0); 385a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 386a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mScript.set_gPFBackground(mPFBackground); 387a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 388a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 389a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private void initPV() { 390a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramVertexFixedFunction.Builder pvb = new ProgramVertexFixedFunction.Builder(mRS); 391a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPVBackground = pvb.create(); 392a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 393a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPVA = new ProgramVertexFixedFunction.Constants(mRS); 394a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ((ProgramVertexFixedFunction)mPVBackground).bindConstants(mPVA); 395a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 396a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mScript.set_gPVBackground(mPVBackground); 397a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 398a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 399a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk void renderLoading() { 400a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mScript = new ScriptC_scenegraph(mRS, mRes, R.raw.scenegraph); 401a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRS.bindRootScript(mScript); 402a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 403a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 404a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk void initSceneRS() { 405a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 406a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 407a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 408a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk void createRenderTargets() { 409a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Type.Builder b = new Type.Builder(mRS, Element.RGBA_8888(mRS)); 410a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk b.setX(mWidth/8).setY(mHeight/8); 411a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Type renderType = b.create(); 412a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRenderTargetBlur0Color = Allocation.createTyped(mRS, renderType, 413a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation.USAGE_GRAPHICS_TEXTURE | 414a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation.USAGE_GRAPHICS_RENDER_TARGET); 415a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRenderTargetBlur1Color = Allocation.createTyped(mRS, renderType, 416a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation.USAGE_GRAPHICS_TEXTURE | 417a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation.USAGE_GRAPHICS_RENDER_TARGET); 418a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRenderTargetBlur2Color = Allocation.createTyped(mRS, renderType, 419a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation.USAGE_GRAPHICS_TEXTURE | 420a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation.USAGE_GRAPHICS_RENDER_TARGET); 421a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 422a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk b = new Type.Builder(mRS, 423a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Element.createPixel(mRS, Element.DataType.UNSIGNED_16, 424a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Element.DataKind.PIXEL_DEPTH)); 425a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk b.setX(mWidth/8).setY(mHeight/8); 426a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRenderTargetBlur0Depth = Allocation.createTyped(mRS, 427a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk b.create(), 428a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation.USAGE_GRAPHICS_RENDER_TARGET); 429a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 430a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRenderTargetBlur1Depth = Allocation.createTyped(mRS, 431a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk b.create(), 432a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation.USAGE_GRAPHICS_RENDER_TARGET); 433a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRenderTargetBlur2Depth = Allocation.createTyped(mRS, 434a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk b.create(), 435a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation.USAGE_GRAPHICS_RENDER_TARGET); 436a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 437a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 438a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramStore BLEND_ADD_DEPTH_NONE(RenderScript rs) { 439a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramStore.Builder builder = new ProgramStore.Builder(rs); 440a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk builder.setDepthFunc(ProgramStore.DepthFunc.ALWAYS); 441a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk builder.setBlendFunc(ProgramStore.BlendSrcFunc.ONE, ProgramStore.BlendDstFunc.ONE); 442a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk builder.setDitherEnabled(false); 443a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk builder.setDepthMaskEnabled(false); 444a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return builder.create(); 445a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 446a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 447a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Drawable getDrawableQuad(String name, RenderState state) { 448a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Drawable quad = new Drawable(); 449a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk quad.setTransform(new MatrixTransform()); 450a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk quad.setMesh(mSceneManager.getScreenAlignedQuad()); 451a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk quad.setName(name); 452a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk quad.setRenderState(state); 453a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk quad.setCullType(1); 454a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return quad; 455a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 456a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 457a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk void addBlurPasses() { 458a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ArrayList<DrawableBase> allDraw = mActiveScene.getDrawables(); 459a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk int numDraw = allDraw.size(); 460a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 461a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderState drawTex = new RenderState(mPV_Blur, mPF_Texture, 462a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk BLEND_ADD_DEPTH_NONE(mRS), 463a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramRaster.CULL_NONE(mRS)); 464a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 465a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderState selectCol = new RenderState(mPV_Blur, mPF_SelectColor, 466a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramStore.BLEND_NONE_DEPTH_NONE(mRS), 467a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramRaster.CULL_NONE(mRS)); 468a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 469a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderState hBlur = new RenderState(mPV_Blur, mPF_BlurH, 470a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramStore.BLEND_NONE_DEPTH_NONE(mRS), 471a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramRaster.CULL_NONE(mRS)); 472a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 473a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderState vBlur = new RenderState(mPV_Blur, mPF_BlurV, 474a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramStore.BLEND_NONE_DEPTH_NONE(mRS), 475a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramRaster.CULL_NONE(mRS)); 476a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 477a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderPass blurSourcePass = new RenderPass(); 478a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk blurSourcePass.setColorTarget(mRenderTargetBlur0Color); 479a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk blurSourcePass.setDepthTarget(mRenderTargetBlur0Depth); 480a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk blurSourcePass.setClearColor(new Float4(1.0f, 1.0f, 1.0f, 1.0f)); 481a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk blurSourcePass.setShouldClearColor(true); 482a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk blurSourcePass.setClearDepth(1.0f); 483a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk blurSourcePass.setShouldClearDepth(true); 484a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk blurSourcePass.setCamera(mActiveScene.getCameras().get(1)); 485a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk for (int i = 0; i < numDraw; i ++) { 486a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk blurSourcePass.appendDrawable((Drawable)allDraw.get(i)); 487a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 488a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.appendRenderPass(blurSourcePass); 489a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 490a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderPass selectColorPass = new RenderPass(); 491a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk selectColorPass.setColorTarget(mRenderTargetBlur2Color); 492a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk selectColorPass.setDepthTarget(mRenderTargetBlur2Depth); 493a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk selectColorPass.setShouldClearColor(false); 494a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk selectColorPass.setShouldClearDepth(false); 495a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk selectColorPass.setCamera(mActiveScene.getCameras().get(1)); 496a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk // Make blur shape 497a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Drawable quad = getDrawableQuad("ScreenAlignedQuadS", selectCol); 498a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk quad.updateTextures(mRS, mRenderTargetBlur0Color, 0); 499a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk selectColorPass.appendDrawable(quad); 500a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.appendRenderPass(selectColorPass); 501a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 502a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderPass horizontalBlurPass = new RenderPass(); 503a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk horizontalBlurPass.setColorTarget(mRenderTargetBlur1Color); 504a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk horizontalBlurPass.setDepthTarget(mRenderTargetBlur1Depth); 505a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk horizontalBlurPass.setShouldClearColor(false); 506a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk horizontalBlurPass.setShouldClearDepth(false); 507a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk horizontalBlurPass.setCamera(mActiveScene.getCameras().get(1)); 508a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk // Make blur shape 509a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk quad = getDrawableQuad("ScreenAlignedQuadH", hBlur); 510a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk quad.updateTextures(mRS, mRenderTargetBlur2Color, 0); 511a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk horizontalBlurPass.appendDrawable(quad); 512a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.appendRenderPass(horizontalBlurPass); 513a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 514a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderPass verticalBlurPass = new RenderPass(); 515a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk verticalBlurPass.setColorTarget(mRenderTargetBlur2Color); 516a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk verticalBlurPass.setDepthTarget(mRenderTargetBlur2Depth); 517a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk verticalBlurPass.setShouldClearColor(false); 518a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk verticalBlurPass.setShouldClearDepth(false); 519a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk verticalBlurPass.setCamera(mActiveScene.getCameras().get(1)); 520a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk // Make blur shape 521a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk quad = getDrawableQuad("ScreenAlignedQuadV", vBlur); 522a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk quad.updateTextures(mRS, mRenderTargetBlur1Color, 0); 523a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk verticalBlurPass.appendDrawable(quad); 524a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.appendRenderPass(verticalBlurPass); 525a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 526a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 527a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 528a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk void initRenderPasses() { 529a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ArrayList<DrawableBase> allDraw = mActiveScene.getDrawables(); 530a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk int numDraw = allDraw.size(); 531a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 532a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (mUseBlur) { 533a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk addBlurPasses(); 534a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 535a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 536a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderPass mainPass = new RenderPass(); 537a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mainPass.setClearColor(new Float4(1.0f, 1.0f, 1.0f, 1.0f)); 538a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mainPass.setShouldClearColor(true); 539a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mainPass.setClearDepth(1.0f); 540a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mainPass.setShouldClearDepth(true); 541a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mainPass.setCamera(mActiveScene.getCameras().get(1)); 542a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk for (int i = 0; i < numDraw; i ++) { 543a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mainPass.appendDrawable((Drawable)allDraw.get(i)); 544a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 545a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.appendRenderPass(mainPass); 546a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 547a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (mUseBlur) { 548a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderState drawTex = new RenderState(mPV_Blur, mPF_Texture, 549a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk BLEND_ADD_DEPTH_NONE(mRS), 550a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramRaster.CULL_NONE(mRS)); 551a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 552a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderPass compositePass = new RenderPass(); 553a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk compositePass.setClearColor(new Float4(1.0f, 1.0f, 1.0f, 0.0f)); 554a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk compositePass.setShouldClearColor(false); 555a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk compositePass.setClearDepth(1.0f); 556a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk compositePass.setShouldClearDepth(false); 557a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk compositePass.setCamera(mActiveScene.getCameras().get(1)); 558a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Drawable quad = getDrawableQuad("ScreenAlignedQuad", drawTex); 559a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk quad.updateTextures(mRS, mRenderTargetBlur2Color, 0); 560a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk compositePass.appendDrawable(quad); 561a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 562a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.appendRenderPass(compositePass); 563a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 564a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 565a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 566a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void prepareToRender(Scene s) { 567a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene = s; 568a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderState plastic = new RenderState(mPV_Paint, mPF_Plastic, null, null); 569a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderState diffuse = new RenderState(mPV_Paint, mPF_Diffuse, null, null); 570a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderState paint = new RenderState(mPV_Paint, mPF_Paint, null, null); 571a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderState aluminum = new RenderState(mPV_Paint, mPF_Aluminum, null, null); 572a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderState glassTransp = new RenderState(mPV_Paint, 573a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Paint, 574a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramStore.BLEND_ALPHA_DEPTH_TEST(mRS), 575a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk null); 576a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 577a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk initRenderPasses(); 578a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 579a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.assignRenderState(plastic); 580a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 581a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(diffuse, "lambert2$"); 582a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 583a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(paint, "^#Paint"); 584a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(paint, "^#Carbon"); 585a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(paint, "^#Glass"); 586a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(paint, "^#MainGlass"); 587a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 588a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(aluminum, "^#Metal"); 589a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(aluminum, "^#Brake"); 590a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 591a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.assignRenderStateToMaterial(glassTransp, "^#GlassLight"); 592a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 593a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Drawable plane = (Drawable)mActiveScene.getDrawableByName("pPlaneShape1"); 594a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (plane != null) { 595a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderState texState = new RenderState(mPV_Paint, mPF_Texture, null, null); 596a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk plane.setRenderState(texState); 597a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk plane.setVisible(mRS, !mUseBlur); 598a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 599a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 600a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTouchHandler.init(mActiveScene); 601a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 602a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk long start = System.currentTimeMillis(); 603a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mActiveScene.initRS(mRS, mRes, mSceneManager); 604a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk long end = System.currentTimeMillis(); 605a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Log.v("TIMER", "Scene init time: " + (end - start)); 606a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 607a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mScript.set_gInitialized(true); 608a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 609a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 610a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private void initRS() { 611a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 612a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk createRenderTargets(); 613a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk initPaintShaders(); 614a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk new ImageLoaderTask().execute(); 615a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 616a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Bitmap b = BitmapFactory.decodeResource(mRes, R.drawable.defaultcube); 617a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mDefaultCube = Allocation.createCubemapFromBitmap(mRS, b); 618a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Paint.bindTexture(mDefaultCube, 1); 619a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mPF_Aluminum.bindTexture(mDefaultCube, 1); 620a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 621a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ScriptC_render renderLoop = mSceneManager.getRenderLoop(); 622a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk renderLoop.bind_vConst(mVsConst); 623a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk renderLoop.bind_fConst(mFsConst); 624a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 625a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mScript.set_gRenderLoop(renderLoop); 626a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation dummyAlloc = Allocation.createSized(mRS, Element.I32(mRS), 1); 627a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mScript.set_gDummyAlloc(dummyAlloc); 628a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 629a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk} 630