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; 22dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchoukimport java.util.Iterator; 23a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 24dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchoukimport com.android.scenegraph.Float4Param; 25d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchoukimport com.android.scenegraph.MatrixTransform; 265c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchoukimport com.android.scenegraph.SceneManager; 27dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchoukimport com.android.scenegraph.ShaderParam; 28dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchoukimport com.android.scenegraph.TransformParam; 29dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk 30dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchoukimport android.content.res.Resources; 31a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Allocation; 32dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchoukimport android.renderscript.Element; 33dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchoukimport android.renderscript.Element.DataType; 34a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Matrix4f; 35a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Mesh; 36a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.ProgramFragment; 37a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.ProgramStore; 38a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.ProgramVertex; 39a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.RenderScriptGL; 40a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.util.Log; 41a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 42a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk/** 43a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * @hide 44a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk */ 45684267525b349eb12f4e31d88061c51115678decAlex Sakhartchoukpublic class Renderable extends RenderableBase { 46dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk HashMap<String, ShaderParam> mSourceParams; 47dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk 48a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk RenderState mRenderState; 49a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Transform mTransform; 50a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 51a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk String mMeshName; 52a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk String mMeshIndexName; 53a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 54a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public String mMaterialName; 55a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 56e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk ScriptField_Renderable_s mField; 57e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk ScriptField_Renderable_s.Item mData; 58a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 59684267525b349eb12f4e31d88061c51115678decAlex Sakhartchouk public Renderable() { 60dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk mSourceParams = new HashMap<String, ShaderParam>(); 61e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mData = new ScriptField_Renderable_s.Item(); 62a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 63a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 64a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setCullType(int cull) { 65e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mData.cullType = cull; 66a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 67a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 68a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setRenderState(RenderState renderState) { 69a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRenderState = renderState; 705c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk if (mField != null) { 715c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk RenderScriptGL rs = SceneManager.getRS(); 725c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk updateFieldItem(rs); 735c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk mField.set(mData, 0, true); 745c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk } 75a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 76a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 77a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setMesh(Mesh mesh) { 78e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mData.mesh = mesh; 795c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk if (mField != null) { 805c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk mField.set_mesh(0, mData.mesh, true); 815c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk } 82a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 83a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 84a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setMesh(String mesh, String indexName) { 85a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mMeshName = mesh; 86a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mMeshIndexName = indexName; 87a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 88a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 89a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setMaterialName(String name) { 90a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mMaterialName = name; 91a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 92a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 93d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk public Transform getTransform() { 94d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk return mTransform; 95d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk } 96d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk 97a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setTransform(Transform t) { 98a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTransform = t; 995c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk if (mField != null) { 1005c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk RenderScriptGL rs = SceneManager.getRS(); 1015c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk updateFieldItem(rs); 1025c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk mField.set(mData, 0, true); 1035c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk } 104a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 105a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 106a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void appendSourceParams(ShaderParam p) { 107dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk mSourceParams.put(p.getParamName(), p); 1085c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk // Possibly lift this restriction later 1095c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk if (mField != null) { 1105c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk throw new RuntimeException("Can't add source params to objects that are rendering"); 1115c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk } 112a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 113a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 114e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk public void resolveMeshData(Mesh mesh) { 115e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mData.mesh = mesh; 116e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk if (mData.mesh == null) { 117a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Log.v("DRAWABLE: ", "*** NO MESH *** " + mMeshName); 118a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return; 119a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 120e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk int subIndexCount = mData.mesh.getPrimitiveCount(); 121a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (subIndexCount == 1 || mMeshIndexName == null) { 122e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mData.meshIndex = 0; 123a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } else { 124a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk for (int i = 0; i < subIndexCount; i ++) { 125e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk if (mData.mesh.getIndexSetAllocation(i).getName().equals(mMeshIndexName)) { 126e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mData.meshIndex = i; 127a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk break; 128a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 129a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 130a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 131e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk if (mField != null) { 132e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mField.set(mData, 0, true); 133e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk } 134a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 135a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 136e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk void updateTextures(RenderScriptGL rs) { 137dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk Iterator<ShaderParam> allParamsIter = mSourceParams.values().iterator(); 138be5bdeb9471c4a04905edd34e6d3560315293427Alex Sakhartchouk int paramIndex = 0; 139dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk while (allParamsIter.hasNext()) { 140dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk ShaderParam sp = allParamsIter.next(); 141a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (sp instanceof TextureParam) { 142a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk TextureParam p = (TextureParam)sp; 1435de922962a2fa06267f3ad26f75e3a8083af906cAlex Sakhartchouk TextureBase tex = p.getTexture(); 1445de922962a2fa06267f3ad26f75e3a8083af906cAlex Sakhartchouk if (tex != null) { 145e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk mData.pf_textures[paramIndex++] = tex.getRsData(false).getAllocation(); 1465de922962a2fa06267f3ad26f75e3a8083af906cAlex Sakhartchouk } 147a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 148a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 1494fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk ProgramFragment pf = mRenderState.mFragment.mProgram; 150e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mData.pf_num_textures = pf != null ? Math.min(pf.getTextureCount(), paramIndex) : 0; 1515c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk if (mField != null) { 1525c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk mField.set_pf_textures(0, mData.pf_textures, true); 1535c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk mField.set_pf_num_textures(0, mData.pf_num_textures, true); 1545c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk } 155a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 156a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 157e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk public void setVisible(boolean vis) { 158e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mData.cullType = vis ? 0 : 2; 159e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk if (mField != null) { 160e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mField.set_cullType(0, mData.cullType, true); 161e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk } 162a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 163a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 164684267525b349eb12f4e31d88061c51115678decAlex Sakhartchouk ScriptField_Renderable_s getRsField(RenderScriptGL rs, Resources res) { 165e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk if (mField != null) { 166e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk return mField; 167a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 1685c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk updateFieldItem(rs); 169e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk updateTextures(rs); 170a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 171e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mField = new ScriptField_Renderable_s(rs, 1); 172e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mField.set(mData, 0, true); 173a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 174e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk return mField; 175a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 176a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 1775c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk void updateVertexConstants(RenderScriptGL rs) { 1785c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk Allocation pvParams = null, vertexConstants = null; 1794fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk VertexShader pv = mRenderState.mVertex; 1804fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk if (pv != null && pv.getObjectConstants() != null) { 181e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk vertexConstants = Allocation.createTyped(rs, pv.getObjectConstants()); 182e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk Element vertexConst = vertexConstants.getType().getElement(); 183e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk pvParams = ShaderParam.fillInParams(vertexConst, mSourceParams, 184e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mTransform).getAllocation(); 185dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk } 1865c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk mData.pv_const = vertexConstants; 1875c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk mData.pv_constParams = pvParams; 1885c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk } 1895c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk 1905c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk void updateFragmentConstants(RenderScriptGL rs) { 1915c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk Allocation pfParams = null, fragmentConstants = null; 1924fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk FragmentShader pf = mRenderState.mFragment; 1934fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk if (pf != null && pf.getObjectConstants() != null) { 194e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk fragmentConstants = Allocation.createTyped(rs, pf.getObjectConstants()); 195e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk Element fragmentConst = fragmentConstants.getType().getElement(); 196e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk pfParams = ShaderParam.fillInParams(fragmentConst, mSourceParams, 197e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mTransform).getAllocation(); 198dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk } 199e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mData.pf_const = fragmentConstants; 200e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mData.pf_constParams = pfParams; 2015c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk } 2025c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk 2035c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk void updateFieldItem(RenderScriptGL rs) { 204c71343acc469db7ec351db2344032801e0e1b30aAlex Sakhartchouk if (mRenderState == null) { 205c71343acc469db7ec351db2344032801e0e1b30aAlex Sakhartchouk mRenderState = SceneManager.getDefaultState(); 206c71343acc469db7ec351db2344032801e0e1b30aAlex Sakhartchouk } 207d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk if (mTransform == null) { 208d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk mTransform = SceneManager.getDefaultTransform(); 209d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk } 2105c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk updateVertexConstants(rs); 2115c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk updateFragmentConstants(rs); 2125c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk 213d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk mData.transformMatrix = mTransform.getRSData().getAllocation(); 214d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk 2155c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk mData.name = getNameAlloc(rs); 216e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mData.render_state = mRenderState.getRSData().getAllocation(); 217e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk mData.bVolInitialized = 0; 218a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 219a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk} 220a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 221a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 222a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 223a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 224a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 225