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