Scene.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.lang.Math; 20a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.util.ArrayList; 21a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.util.HashMap; 22a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.util.regex.Matcher; 23a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.util.regex.Pattern; 24a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 25a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.RenderScriptGL; 26a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Mesh; 27a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.*; 28a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.content.res.Resources; 29a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.util.Log; 30a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.os.AsyncTask; 31a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 32a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk/** 33a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * @hide 34a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk */ 35a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukpublic class Scene extends SceneGraphBase { 36a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private static String TIMER_TAG = "TIMER"; 37a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 38a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private class ImageLoaderTask extends AsyncTask<String, Void, Boolean> { 39a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk protected Boolean doInBackground(String... names) { 40a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk long start = System.currentTimeMillis(); 41a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk for (int i = 0; i < mDrawables.size(); i ++) { 42a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Drawable dI = (Drawable)mDrawables.get(i); 43a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk dI.updateTextures(mRS, mRes); 44a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 45a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk long end = System.currentTimeMillis(); 46a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Log.v(TIMER_TAG, "Texture init time: " + (end - start)); 47a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return new Boolean(true); 48a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 49a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 50a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk protected void onPostExecute(Boolean result) { 51a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 52a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 53a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 54a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk CompoundTransform mRootTransforms; 55a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk HashMap<String, Transform> mTransformMap; 56a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ArrayList<RenderPass> mRenderPasses; 57a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ArrayList<LightBase> mLights; 58a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ArrayList<Camera> mCameras; 59a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ArrayList<DrawableBase> mDrawables; 60a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk HashMap<String, DrawableBase> mDrawableMap; 61a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ArrayList<Texture2D> mTextures; 62a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 63a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk HashMap<String, ArrayList<Drawable> > mDrawableMeshMap; 64a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 65a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk // RS Specific stuff 66a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ScriptField_SgTransform mTransformRSData; 67a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 68a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderScriptGL mRS; 69a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Resources mRes; 70a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 71a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ScriptField_RenderPass_s mRenderPassAlloc; 72a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 73a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public Scene() { 74a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRenderPasses = new ArrayList<RenderPass>(); 75a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mLights = new ArrayList<LightBase>(); 76a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mCameras = new ArrayList<Camera>(); 77a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mDrawables = new ArrayList<DrawableBase>(); 78a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mDrawableMap = new HashMap<String, DrawableBase>(); 79a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mDrawableMeshMap = new HashMap<String, ArrayList<Drawable> >(); 80a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTextures = new ArrayList<Texture2D>(); 81a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRootTransforms = new CompoundTransform(); 82a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRootTransforms.setName("_scene_root_"); 83a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTransformMap = new HashMap<String, Transform>(); 84a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 85a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 86a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void appendTransform(Transform t) { 87a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRootTransforms.appendChild(t); 88a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 89a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 90a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk // temporary 91a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void addToTransformMap(Transform t) { 92a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTransformMap.put(t.getName(), t); 93a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 94a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 95a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public Transform getTransformByName(String name) { 96a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return mTransformMap.get(name); 97a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 98a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 99a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void appendRenderPass(RenderPass p) { 100a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRenderPasses.add(p); 101a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 102a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 103a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void clearRenderPasses() { 104a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRenderPasses.clear(); 105a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 106a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 107a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void appendLight(LightBase l) { 108a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mLights.add(l); 109a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 110a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 111a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void appendCamera(Camera c) { 112a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mCameras.add(c); 113a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 114a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 115a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public ArrayList<Camera> getCameras() { 116a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return mCameras; 117a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 118a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 119a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void appendDrawable(DrawableBase d) { 120a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mDrawables.add(d); 121a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mDrawableMap.put(d.getName(), d); 122a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 123a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 124a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public ArrayList<DrawableBase> getDrawables() { 125a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return mDrawables; 126a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 127a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 128a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public DrawableBase getDrawableByName(String name) { 129a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return mDrawableMap.get(name); 130a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 131a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 132a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void appendTextures(Texture2D tex) { 133a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTextures.add(tex); 134a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 135a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 136a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void assignRenderStateToMaterial(RenderState renderState, String regex) { 137a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Pattern pattern = Pattern.compile(regex); 138a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk int numDrawables = mDrawables.size(); 139a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk for (int i = 0; i < numDrawables; i ++) { 140a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Drawable shape = (Drawable)mDrawables.get(i); 141a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Matcher m = pattern.matcher(shape.mMaterialName); 142a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (m.find()) { 143a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk shape.setRenderState(renderState); 144a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 145a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 146a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 147a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 148a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void assignRenderState(RenderState renderState) { 149a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk int numDrawables = mDrawables.size(); 150a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk for (int i = 0; i < numDrawables; i ++) { 151a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Drawable shape = (Drawable)mDrawables.get(i); 152a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk shape.setRenderState(renderState); 153a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 154a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 155a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 156a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void meshLoaded(Mesh m) { 157a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ArrayList<Drawable> entries = mDrawableMeshMap.get(m.getName()); 158a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk int numEntries = entries.size(); 159a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk for (int i = 0; i < numEntries; i++) { 160a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Drawable d = entries.get(i); 161a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk d.resolveMeshData(m); 162a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk //mDrawablesField.set(d.getRsField(mRS, mRes), d.sceneIndex, true); 163a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 164a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 165a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 166a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk void addToMeshMap(Drawable d) { 167a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ArrayList<Drawable> entries = mDrawableMeshMap.get(d.mMeshName); 168a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (entries == null) { 169a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk entries = new ArrayList<Drawable>(); 170a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mDrawableMeshMap.put(d.mMeshName, entries); 171a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 172a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk entries.add(d); 173a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 174a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 175a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void destroyRS(SceneManager sceneManager) { 176a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTransformRSData = null; 177a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk sceneManager.mRenderLoop.bind_gRootNode(mTransformRSData); 178a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk sceneManager.mRenderLoop.set_gDrawableObjects(null); 179a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRenderPassAlloc = null; 180a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk sceneManager.mRenderLoop.set_gRenderPasses(null); 181a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk sceneManager.mRenderLoop.bind_gFrontToBack(null); 182a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk sceneManager.mRenderLoop.bind_gBackToFront(null); 183a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk sceneManager.mRenderLoop.set_gCameras(null); 184a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 185a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTransformMap = null; 186a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRenderPasses = null; 187a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mLights = null; 188a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mCameras = null; 189a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mDrawables = null; 190a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mDrawableMap = null; 191a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTextures = null; 192a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mDrawableMeshMap = null; 193a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRootTransforms = null; 194a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 195a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 196a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void initRenderPassRS(RenderScriptGL rs, SceneManager sceneManager) { 197a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (mRenderPasses.size() != 0) { 198a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRenderPassAlloc = new ScriptField_RenderPass_s(mRS, mRenderPasses.size()); 199a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk for (int i = 0; i < mRenderPasses.size(); i ++) { 200a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRenderPassAlloc.set(mRenderPasses.get(i).getRsField(mRS, mRes), i, false); 201a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 202a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRenderPassAlloc.copyAll(); 203a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk sceneManager.mRenderLoop.set_gRenderPasses(mRenderPassAlloc.getAllocation()); 204a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 205a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 206a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 207a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void initRS(RenderScriptGL rs, Resources res, SceneManager sceneManager) { 208a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRS = rs; 209a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk long start = System.currentTimeMillis(); 210a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTransformRSData = mRootTransforms.getRSData(rs); 211a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk long end = System.currentTimeMillis(); 212a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Log.v(TIMER_TAG, "Transform init time: " + (end - start)); 213a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 214a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk start = System.currentTimeMillis(); 215a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 216a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk sceneManager.mRenderLoop.bind_gRootNode(mTransformRSData); 217a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk end = System.currentTimeMillis(); 218a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Log.v(TIMER_TAG, "Script init time: " + (end - start)); 219a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 220a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk start = System.currentTimeMillis(); 221a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation drawableData = Allocation.createSized(rs, 222a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Element.ALLOCATION(rs), 223a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mDrawables.size()); 224a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation[] drawableAllocs = new Allocation[mDrawables.size()]; 225a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk for (int i = 0; i < mDrawables.size(); i ++) { 226a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Drawable dI = (Drawable)mDrawables.get(i); 227a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk dI.sceneIndex = i; 228a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk addToMeshMap(dI); 229a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk drawableAllocs[i] = dI.getRsField(rs, res).getAllocation(); 230a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 231a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk drawableData.copyFrom(drawableAllocs); 232a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk sceneManager.mRenderLoop.set_gDrawableObjects(drawableData); 233a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 234a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk initRenderPassRS(rs, sceneManager); 235a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 236a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk new ImageLoaderTask().execute(); 237a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 238a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk end = System.currentTimeMillis(); 239a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Log.v(TIMER_TAG, "Drawable init time: " + (end - start)); 240a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 241a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation opaqueBuffer = Allocation.createSized(rs, Element.U32(rs), mDrawables.size()); 242a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation transparentBuffer = Allocation.createSized(rs, 243a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Element.U32(rs), mDrawables.size()); 244a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 245a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk sceneManager.mRenderLoop.bind_gFrontToBack(opaqueBuffer); 246a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk sceneManager.mRenderLoop.bind_gBackToFront(transparentBuffer); 247a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 248a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation cameraData = Allocation.createSized(rs, Element.ALLOCATION(rs), mCameras.size()); 249a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation[] cameraAllocs = new Allocation[mCameras.size()]; 250a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk for (int i = 0; i < mCameras.size(); i ++) { 251a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk cameraAllocs[i] = mCameras.get(i).getRSData(rs).getAllocation(); 252a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 253a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk cameraData.copyFrom(cameraAllocs); 254a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk sceneManager.mRenderLoop.set_gCameras(cameraData); 255a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 256a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk} 257a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 258a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 259a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 260a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 261