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 22a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Float3; 23875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchoukimport android.renderscript.Float4; 24a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Matrix4f; 25875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchoukimport android.renderscript.RenderScriptGL; 26a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.util.Log; 27a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 28a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk/** 29a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * @hide 30a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk */ 31875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchoukpublic abstract class LightBase extends SceneGraphBase { 32875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk static final int RS_LIGHT_POINT = 0; 33875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk static final int RS_LIGHT_DIRECTIONAL = 1; 34875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk 35875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk ScriptField_Light_s mField; 36875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk ScriptField_Light_s.Item mFieldData; 37a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Transform mTransform; 38875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk Float4 mColor; 39a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk float mIntensity; 40a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public LightBase() { 41875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk mColor = new Float4(0.0f, 0.0f, 0.0f, 0.0f); 42a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mIntensity = 1.0f; 43a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 44a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 45a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setTransform(Transform t) { 46a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mTransform = t; 47e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk updateRSData(); 48a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 49a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 50875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk public void setColor(float r, float g, float b) { 51875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk mColor.x = r; 52875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk mColor.y = g; 53875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk mColor.z = b; 54e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk updateRSData(); 55875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk } 56875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk 57a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setColor(Float3 c) { 58e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk setColor(c.x, c.y, c.z); 59a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 60a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 61a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setIntensity(float i) { 62a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mIntensity = i; 63e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk updateRSData(); 64a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 65875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk 66e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk public void setName(String n) { 67e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk super.setName(n); 68e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk updateRSData(); 69e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk } 70875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk 71e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk protected void updateRSData() { 72875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk if (mField == null) { 73e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk return; 74875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk } 75e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk RenderScriptGL rs = SceneManager.getRS(); 76e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk mFieldData.transformMatrix = mTransform.getRSData().getAllocation(); 77e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk mFieldData.name = getNameAlloc(rs); 78875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk mFieldData.color = mColor; 79875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk mFieldData.intensity = mIntensity; 80875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk 81875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk initLocalData(); 82875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk 83875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk mField.set(mFieldData, 0, true); 84e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk } 85e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk 86e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk abstract void initLocalData(); 87e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk 88e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk ScriptField_Light_s getRSData() { 89e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk if (mField != null) { 90e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk return mField; 91e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk } 92e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk 93e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk RenderScriptGL rs = SceneManager.getRS(); 94e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk if (rs == null) { 95e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk return null; 96e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk } 97e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk if (mField == null) { 98e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk mField = new ScriptField_Light_s(rs, 1); 99e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk mFieldData = new ScriptField_Light_s.Item(); 100e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk } 101e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk 102e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk updateRSData(); 103875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk 104875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk return mField; 105875a538d5db06e7e055401050e03b86bf8598536Alex Sakhartchouk } 106a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk} 107a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 108a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 109a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 110a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 111a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 112