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