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