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.util.Log; 23a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 24a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.*; 25a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.content.res.Resources; 26a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 27a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk/** 28a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * @hide 29a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk */ 30a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukpublic class RenderPass extends SceneGraphBase { 31a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 32e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk TextureRenderTarget mColorTarget; 33a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Float4 mClearColor; 34a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk boolean mShouldClearColor; 35a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 36e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk TextureRenderTarget mDepthTarget; 37a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk float mClearDepth; 38a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk boolean mShouldClearDepth; 39a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 40684267525b349eb12f4e31d88061c51115678decAlex Sakhartchouk ArrayList<RenderableBase> mObjectsToDraw; 41a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 42a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Camera mCamera; 43a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 44a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ScriptField_RenderPass_s.Item mRsField; 45a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 46a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public RenderPass() { 47684267525b349eb12f4e31d88061c51115678decAlex Sakhartchouk mObjectsToDraw = new ArrayList<RenderableBase>(); 48a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mClearColor = new Float4(0.0f, 0.0f, 0.0f, 0.0f); 49a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mShouldClearColor = true; 50a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mClearDepth = 1.0f; 51a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mShouldClearDepth = true; 52a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 53a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 54684267525b349eb12f4e31d88061c51115678decAlex Sakhartchouk public void appendRenderable(Renderable d) { 55a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mObjectsToDraw.add(d); 56a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 57a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 58a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setCamera(Camera c) { 59a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mCamera = c; 60a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 61a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 62e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk public void setColorTarget(TextureRenderTarget colorTarget) { 63a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mColorTarget = colorTarget; 64a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 65a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setClearColor(Float4 clearColor) { 66a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mClearColor = clearColor; 67a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 68a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setShouldClearColor(boolean shouldClearColor) { 69a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mShouldClearColor = shouldClearColor; 70a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 71a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 72e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk public void setDepthTarget(TextureRenderTarget depthTarget) { 73a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mDepthTarget = depthTarget; 74a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 75a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setClearDepth(float clearDepth) { 76a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mClearDepth = clearDepth; 77a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 78a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setShouldClearDepth(boolean shouldClearDepth) { 79a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mShouldClearDepth = shouldClearDepth; 80a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 81a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 82516054bf53b0a8844267185ddaf1d505c9e81da7Alex Sakhartchouk public ArrayList<RenderableBase> getRenderables() { 83516054bf53b0a8844267185ddaf1d505c9e81da7Alex Sakhartchouk return mObjectsToDraw; 84516054bf53b0a8844267185ddaf1d505c9e81da7Alex Sakhartchouk } 85516054bf53b0a8844267185ddaf1d505c9e81da7Alex Sakhartchouk 86a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk ScriptField_RenderPass_s.Item getRsField(RenderScriptGL rs, Resources res) { 87a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (mRsField != null) { 88a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return mRsField; 89a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 90a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 91a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRsField = new ScriptField_RenderPass_s.Item(); 92e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk if (mColorTarget != null) { 93e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk mRsField.color_target = mColorTarget.getRsData(true).get_texture(0); 94e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk } 95e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk if (mColorTarget != null) { 96e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk mRsField.depth_target = mDepthTarget.getRsData(true).get_texture(0); 97e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk } 98e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk mRsField.camera = mCamera != null ? mCamera.getRSData().getAllocation() : null; 99a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 100a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (mObjectsToDraw.size() != 0) { 101a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation drawableData = Allocation.createSized(rs, 102a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Element.ALLOCATION(rs), 103a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mObjectsToDraw.size()); 104a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Allocation[] drawableAllocs = new Allocation[mObjectsToDraw.size()]; 105a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk for (int i = 0; i < mObjectsToDraw.size(); i ++) { 106684267525b349eb12f4e31d88061c51115678decAlex Sakhartchouk Renderable dI = (Renderable)mObjectsToDraw.get(i); 107a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk drawableAllocs[i] = dI.getRsField(rs, res).getAllocation(); 108a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 109a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk drawableData.copyFrom(drawableAllocs); 110a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRsField.objects = drawableData; 111a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 112a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 113a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRsField.clear_color = mClearColor; 114a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRsField.clear_depth = mClearDepth; 115a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRsField.should_clear_color = mShouldClearColor; 116a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mRsField.should_clear_depth = mShouldClearDepth; 117a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return mRsField; 118a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 119a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk} 120a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 121a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 122a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 123a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 124a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 125