14fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk/* 24fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project 34fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * 44fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 54fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * you may not use this file except in compliance with the License. 64fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * You may obtain a copy of the License at 74fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * 84fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 94fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * 104fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 114fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 124fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * See the License for the specific language governing permissions and 144fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * limitations under the License. 154fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk */ 164fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 174fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukpackage com.android.scenegraph; 184fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 194fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukimport java.lang.Math; 204fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukimport java.util.ArrayList; 214fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukimport java.util.HashMap; 224fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 230c9523357f48a26c8214ccff0b0d95c6927ac0d3Alex Sakhartchoukimport com.android.scenegraph.SceneGraphBase; 240c9523357f48a26c8214ccff0b0d95c6927ac0d3Alex Sakhartchoukimport com.android.scenegraph.ShaderParam; 250c9523357f48a26c8214ccff0b0d95c6927ac0d3Alex Sakhartchouk 264fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukimport android.renderscript.*; 2799b93819f12f18b8559f702d7a303c31fe05205aAlex Sakhartchoukimport android.renderscript.ProgramFragment.Builder; 284fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukimport android.util.Log; 294fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 304fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk/** 314fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * @hide 324fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk */ 334fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukpublic abstract class Shader extends SceneGraphBase { 344fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk protected Type mPerObjConstants; 354fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk protected Type mPerShaderConstants; 364fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 374fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk protected HashMap<String, ShaderParam> mSourceParams; 3899b93819f12f18b8559f702d7a303c31fe05205aAlex Sakhartchouk protected ArrayList<String> mShaderTextureNames; 3999b93819f12f18b8559f702d7a303c31fe05205aAlex Sakhartchouk protected ArrayList<Program.TextureType > mShaderTextureTypes; 404fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk protected ArrayList<String> mTextureNames; 4199b93819f12f18b8559f702d7a303c31fe05205aAlex Sakhartchouk protected ArrayList<Program.TextureType > mTextureTypes; 424fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 434fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk protected Allocation mConstantBuffer; 440c9523357f48a26c8214ccff0b0d95c6927ac0d3Alex Sakhartchouk protected ScriptField_ShaderParam_s mConstantBufferParams; 454fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 464fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk public Shader() { 474fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mSourceParams = new HashMap<String, ShaderParam>(); 4899b93819f12f18b8559f702d7a303c31fe05205aAlex Sakhartchouk mShaderTextureNames = new ArrayList<String>(); 4999b93819f12f18b8559f702d7a303c31fe05205aAlex Sakhartchouk mShaderTextureTypes = new ArrayList<Program.TextureType>(); 504fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mTextureNames = new ArrayList<String>(); 5199b93819f12f18b8559f702d7a303c31fe05205aAlex Sakhartchouk mTextureTypes = new ArrayList<Program.TextureType>(); 524fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk } 534fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 544fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk public void appendSourceParams(ShaderParam p) { 554fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mSourceParams.put(p.getParamName(), p); 564fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk } 574fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 584fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk public Type getObjectConstants() { 594fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk return mPerObjConstants; 604fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk } 614fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 624fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk public Type getShaderConstants() { 634fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk return mPerObjConstants; 644fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk } 654fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 66e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk void linkConstants(RenderScriptGL rs) { 674fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk if (mPerShaderConstants == null) { 684fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk return; 694fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk } 704fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 714fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk Element constElem = mPerShaderConstants.getElement(); 720c9523357f48a26c8214ccff0b0d95c6927ac0d3Alex Sakhartchouk mConstantBufferParams = ShaderParam.fillInParams(constElem, mSourceParams, null); 734fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk 744fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk mConstantBuffer = Allocation.createTyped(rs, mPerShaderConstants); 754fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk } 764fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk} 77