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 Sakhartchouk
22dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchoukimport android.renderscript.RenderScriptGL;
23a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Matrix4f;
24a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.ProgramFragment;
25a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.ProgramStore;
26a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.ProgramVertex;
27a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Element;
28a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.util.Log;
29a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk
30a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk/**
31a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * @hide
32a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk */
33a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukpublic class TransformParam extends ShaderParam {
34a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk
35a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk    Transform mTransform;
36dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk    LightBase mLight;
37a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk
38a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk    public TransformParam(String name) {
39a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk        super(name);
40a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk    }
41a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk
42a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk    public void setTransform(Transform t) {
43a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk        mTransform = t;
445c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk        if (mField != null && mTransform != null) {
455c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk            mData.transform = mTransform.getRSData().getAllocation();
465c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk        }
475c15b765fecca6b0ba2760d04c86798ff980fd53Alex Sakhartchouk        incTimestamp();
48a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk    }
49a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk
50dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk    int getTypeFromName() {
51e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk        int paramType = ScriptC_export.const_ShaderParam_TRANSFORM_DATA;
52dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk        if (mParamName.equalsIgnoreCase(view)) {
53e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk            paramType = ScriptC_export.const_ShaderParam_TRANSFORM_VIEW;
54dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk        } else if(mParamName.equalsIgnoreCase(proj)) {
55e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk            paramType = ScriptC_export.const_ShaderParam_TRANSFORM_PROJ;
56dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk        } else if(mParamName.equalsIgnoreCase(viewProj)) {
57e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk            paramType = ScriptC_export.const_ShaderParam_TRANSFORM_VIEW_PROJ;
58dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk        } else if(mParamName.equalsIgnoreCase(model)) {
59e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk            paramType = ScriptC_export.const_ShaderParam_TRANSFORM_MODEL;
60dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk        } else if(mParamName.equalsIgnoreCase(modelView)) {
61e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk            paramType = ScriptC_export.const_ShaderParam_TRANSFORM_MODEL_VIEW;
62dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk        } else if(mParamName.equalsIgnoreCase(modelViewProj)) {
63e31264694e9729db49acbb2d32eab2703efc8501Alex Sakhartchouk            paramType = ScriptC_export.const_ShaderParam_TRANSFORM_MODEL_VIEW_PROJ;
64dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk        }
65dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk        return paramType;
66dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk    }
67dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk
680c9523357f48a26c8214ccff0b0d95c6927ac0d3Alex Sakhartchouk    void initLocalData() {
690c9523357f48a26c8214ccff0b0d95c6927ac0d3Alex Sakhartchouk        mData.type = getTypeFromName();
704fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk        if (mTransform != null) {
710c9523357f48a26c8214ccff0b0d95c6927ac0d3Alex Sakhartchouk            mData.transform = mTransform.getRSData().getAllocation();
724fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk        }
73dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk        if (mCamera != null) {
740c9523357f48a26c8214ccff0b0d95c6927ac0d3Alex Sakhartchouk            mData.camera = mCamera.getRSData().getAllocation();
75dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk        }
76dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk        if (mLight != null) {
770c9523357f48a26c8214ccff0b0d95c6927ac0d3Alex Sakhartchouk            mData.light = mLight.getRSData().getAllocation();
78dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk        }
79dd1da451159578d865230ceada3e1f0058e3c18eAlex Sakhartchouk    }
80a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk}
81a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk
82a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk
83a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk
84a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk
85a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk
86