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; 2199b93819f12f18b8559f702d7a303c31fe05205aAlex Sakhartchoukimport android.content.res.Resources; 22a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 23a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Allocation; 24a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Element; 25a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.Matrix4f; 26a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.ProgramFragment; 27a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.ProgramRaster; 28a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.ProgramStore; 29a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.ProgramVertex; 30a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.RSRuntimeException; 31a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.RenderScript; 32a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.RenderScriptGL; 33a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.util.Log; 34a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 35a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk/** 36a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * @hide 37a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk */ 38a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukpublic class RenderState extends SceneGraphBase { 394fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk VertexShader mVertex; 404fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk FragmentShader mFragment; 41a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramStore mStore; 42a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramRaster mRaster; 43a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 44a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ScriptField_RenderState_s mField; 45a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 464fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk public RenderState(VertexShader pv, 474fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk FragmentShader pf, 48a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramStore ps, 49a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ProgramRaster pr) { 50a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mVertex = pv; 51a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mFragment = pf; 52a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mStore = ps; 53a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRaster = pr; 54a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 55a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 56a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public RenderState(RenderState r) { 57a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mVertex = r.mVertex; 58a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mFragment = r.mFragment; 59a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mStore = r.mStore; 60a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRaster = r.mRaster; 61a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 62a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 634fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk public void setProgramVertex(VertexShader pv) { 64a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mVertex = pv; 65e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk updateRSData(); 66a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 67a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 684fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk public void setProgramFragment(FragmentShader pf) { 69a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mFragment = pf; 70e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk updateRSData(); 71a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 72a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 73a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setProgramStore(ProgramStore ps) { 74a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mStore = ps; 75e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk updateRSData(); 76a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 77a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 78a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setProgramRaster(ProgramRaster pr) { 79a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRaster = pr; 80e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk updateRSData(); 81a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 82a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 83e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk void updateRSData() { 84e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk if (mField == null) { 85e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk return; 86a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 87a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ScriptField_RenderState_s.Item item = new ScriptField_RenderState_s.Item(); 88e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk item.pv = mVertex.getRSData().getAllocation(); 89e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk item.pf = mFragment.getRSData().getAllocation(); 90a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk item.ps = mStore; 91a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk item.pr = mRaster; 92a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 93a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mField.set(item, 0, true); 94e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk } 95e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk 96e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk public ScriptField_RenderState_s getRSData() { 97e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk if (mField != null) { 98e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk return mField; 99e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk } 100e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk 101e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk RenderScriptGL rs = SceneManager.getRS(); 102e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk if (rs == null) { 103e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk return null; 104e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk } 105e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk 106e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk mField = new ScriptField_RenderState_s(rs, 1); 107e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk updateRSData(); 108e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk 109a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return mField; 110a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 111a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk} 112