159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/* 259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Copyright (c) 2009-2012 jMonkeyEngine 359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * All rights reserved. 459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Redistribution and use in source and binary forms, with or without 659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * modification, are permitted provided that the following conditions are 759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * met: 859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions of source code must retain the above copyright 1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * notice, this list of conditions and the following disclaimer. 1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions in binary form must reproduce the above copyright 1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * notice, this list of conditions and the following disclaimer in the 1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * documentation and/or other materials provided with the distribution. 1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Neither the name of 'jMonkeyEngine' nor the names of its contributors 1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * may be used to endorse or promote products derived from this software 1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * without specific prior written permission. 1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapackage com.jme3.renderer; 3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.math.ColorRGBA; 3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.post.SceneProcessor; 3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.renderer.queue.RenderQueue; 3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.scene.Spatial; 3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.texture.FrameBuffer; 4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.ArrayList; 4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.List; 4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/** 4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * A <code>ViewPort</code> represents a view inside the display 4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * window or a {@link FrameBuffer} to which scenes will be rendered. 4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * A viewport has a {@link #ViewPort(java.lang.String, com.jme3.renderer.Camera) camera} 4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * which is used to render a set of {@link #attachScene(com.jme3.scene.Spatial) scenes}. 4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * A view port has a location on the screen as set by the 5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * {@link Camera#setViewPort(float, float, float, float) } method. 5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * By default, a view port does not clear the framebuffer, but it can be 5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * set to {@link #setClearFlags(boolean, boolean, boolean) clear the framebuffer}. 5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * The background color which the color buffer is cleared to can be specified 5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * via the {@link #setBackgroundColor(com.jme3.math.ColorRGBA)} method. 5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * A ViewPort has a list of {@link SceneProcessor}s which can 5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * control how the ViewPort is rendered by the {@link RenderManager}. 5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @author Kirill Vainer 6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see RenderManager 6259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see SceneProcessor 6359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see Spatial 6459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see Camera 6559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 6659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapublic class ViewPort { 6759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 6859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected final String name; 6959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected final Camera cam; 7059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected final RenderQueue queue = new RenderQueue(); 7159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected final ArrayList<Spatial> sceneList = new ArrayList<Spatial>(); 7259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected final ArrayList<SceneProcessor> processors = new ArrayList<SceneProcessor>(); 7359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected FrameBuffer out = null; 7459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 7559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected final ColorRGBA backColor = new ColorRGBA(0,0,0,0); 7659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected boolean clearDepth = false, clearColor = false, clearStencil = false; 7759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private boolean enabled = true; 7859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 7959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 8059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Create a new viewport. User code should generally use these methods instead:<br> 8159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <ul> 8259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <li>{@link RenderManager#createPreView(java.lang.String, com.jme3.renderer.Camera) }</li> 8359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <li>{@link RenderManager#createMainView(java.lang.String, com.jme3.renderer.Camera) }</li> 8459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <li>{@link RenderManager#createPostView(java.lang.String, com.jme3.renderer.Camera) }</li> 8559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * </ul> 8659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 8759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param name The name of the viewport. Used for debugging only. 8859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param cam The camera through which the viewport is rendered. The camera 8959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * cannot be swapped to a different one after creating the viewport. 9059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 9159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public ViewPort(String name, Camera cam) { 9259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.name = name; 9359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.cam = cam; 9459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 9559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 9659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 9759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Returns the name of the viewport as set in the constructor. 9859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 9959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the name of the viewport 10059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 10159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see #ViewPort(java.lang.String, com.jme3.renderer.Camera) 10259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 10359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public String getName() { 10459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return name; 10559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 10659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 10759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 10859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Get the list of {@link SceneProcessor scene processors} that were 10959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * added to this <code>ViewPort</code> 11059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 11159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the list of processors attached to this ViewPort 11259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 11359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see #addProcessor(com.jme3.post.SceneProcessor) 11459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 11559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public List<SceneProcessor> getProcessors(){ 11659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return processors; 11759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 11859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 11959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 12059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Adds a {@link SceneProcessor} to this ViewPort. 12159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 12259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * SceneProcessors that are added to the ViewPort will be notified 12359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * of events as the ViewPort is being rendered by the {@link RenderManager}. 12459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 12559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param processor The processor to add 12659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 12759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see SceneProcessor 12859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 12959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void addProcessor(SceneProcessor processor){ 13059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta processors.add(processor); 13159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 13259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 13359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 13459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Removes a {@link SceneProcessor} from this ViewPort. 13559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 13659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * The processor will no longer receive events occurring to this ViewPort. 13759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 13859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param processor The processor to remove 13959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 14059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see SceneProcessor 14159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 14259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void removeProcessor(SceneProcessor processor){ 14359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta processors.remove(processor); 14459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta processor.cleanup(); 14559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 14659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 14759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 14859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Check if depth buffer clearing is enabled. 14959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 15059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return true if depth buffer clearing is enabled. 15159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 15259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see #setClearDepth(boolean) 15359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 15459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public boolean isClearDepth() { 15559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return clearDepth; 15659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 15759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 15859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 15959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Enable or disable clearing of the depth buffer for this ViewPort. 16059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 16159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * By default depth clearing is disabled. 16259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 16359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param clearDepth Enable/disable depth buffer clearing. 16459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 16559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setClearDepth(boolean clearDepth) { 16659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.clearDepth = clearDepth; 16759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 16859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 16959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 17059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Check if color buffer clearing is enabled. 17159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 17259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return true if color buffer clearing is enabled. 17359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 17459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see #setClearColor(boolean) 17559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 17659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public boolean isClearColor() { 17759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return clearColor; 17859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 17959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 18059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 18159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Enable or disable clearing of the color buffer for this ViewPort. 18259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 18359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * By default color clearing is disabled. 18459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 18559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param clearColor Enable/disable color buffer clearing. 18659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 18759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setClearColor(boolean clearColor) { 18859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.clearColor = clearColor; 18959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 19059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 19159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 19259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Check if stencil buffer clearing is enabled. 19359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 19459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return true if stencil buffer clearing is enabled. 19559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 19659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see #setClearStencil(boolean) 19759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 19859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public boolean isClearStencil() { 19959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return clearStencil; 20059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 20159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 20259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 20359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Enable or disable clearing of the stencil buffer for this ViewPort. 20459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 20559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * By default stencil clearing is disabled. 20659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 20759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param clearStencil Enable/disable stencil buffer clearing. 20859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 20959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setClearStencil(boolean clearStencil) { 21059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.clearStencil = clearStencil; 21159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 21259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 21359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 21459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Set the clear flags (color, depth, stencil) in one call. 21559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 21659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param color If color buffer clearing should be enabled. 21759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param depth If depth buffer clearing should be enabled. 21859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param stencil If stencil buffer clearing should be enabled. 21959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 22059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see #setClearColor(boolean) 22159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see #setClearDepth(boolean) 22259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see #setClearStencil(boolean) 22359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 22459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setClearFlags(boolean color, boolean depth, boolean stencil){ 22559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.clearColor = color; 22659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.clearDepth = depth; 22759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.clearStencil = stencil; 22859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 22959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 23059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 23159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Returns the framebuffer where this ViewPort's scenes are 23259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * rendered to. 23359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 23459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the framebuffer where this ViewPort's scenes are 23559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * rendered to. 23659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 23759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see #setOutputFrameBuffer(com.jme3.texture.FrameBuffer) 23859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 23959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public FrameBuffer getOutputFrameBuffer() { 24059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return out; 24159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 24259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 24359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 24459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Sets the output framebuffer for the ViewPort. 24559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 24659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * The output framebuffer specifies where the scenes attached 24759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * to this ViewPort are rendered to. By default this is <code>null</code> 24859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * which indicates the scenes are rendered to the display window. 24959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 25059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param out The framebuffer to render scenes to, or null if to render 25159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * to the screen. 25259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 25359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setOutputFrameBuffer(FrameBuffer out) { 25459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.out = out; 25559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 25659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 25759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 25859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Returns the camera which renders the attached scenes. 25959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 26059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the camera which renders the attached scenes. 26159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 26259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see Camera 26359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 26459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Camera getCamera() { 26559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return cam; 26659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 26759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 26859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 26959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Internal use only. 27059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 27159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public RenderQueue getQueue() { 27259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return queue; 27359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 27459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 27559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 27659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Attaches a new scene to render in this ViewPort. 27759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 27859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param scene The scene to attach 27959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 28059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see Spatial 28159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 28259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void attachScene(Spatial scene){ 28359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta sceneList.add(scene); 28459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 28559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 28659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 28759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Detaches a scene from rendering. 28859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 28959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param scene The scene to detach 29059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 29159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see #attachScene(com.jme3.scene.Spatial) 29259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 29359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void detachScene(Spatial scene){ 29459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta sceneList.remove(scene); 29559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 29659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 29759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 29859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Removes all attached scenes. 29959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 30059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see #attachScene(com.jme3.scene.Spatial) 30159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 30259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void clearScenes() { 30359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta sceneList.clear(); 30459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 30559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 30659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 30759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Returns a list of all attached scenes. 30859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 30959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return a list of all attached scenes. 31059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 31159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see #attachScene(com.jme3.scene.Spatial) 31259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 31359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public List<Spatial> getScenes(){ 31459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return sceneList; 31559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 31659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 31759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 31859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Sets the background color. 31959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 32059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * When the ViewPort's color buffer is cleared 32159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * (if {@link #setClearColor(boolean) color clearing} is enabled), 32259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * this specifies the color to which the color buffer is set to. 32359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * By default the background color is black without alpha. 32459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 32559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param background the background color. 32659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 32759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setBackgroundColor(ColorRGBA background){ 32859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta backColor.set(background); 32959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 33059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 33159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 33259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Returns the background color of this ViewPort 33359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 33459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the background color of this ViewPort 33559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 33659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see #setBackgroundColor(com.jme3.math.ColorRGBA) 33759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 33859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public ColorRGBA getBackgroundColor(){ 33959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return backColor; 34059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 34159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 34259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 34359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Enable or disable this ViewPort. 34459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 34559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Disabled ViewPorts are skipped by the {@link RenderManager} when 34659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * rendering. By default all ViewPorts are enabled. 34759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 34859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param enable If the viewport should be disabled or enabled. 34959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 35059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setEnabled(boolean enable) { 35159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.enabled = enable; 35259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 35359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 35459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 35559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Returns true if the viewport is enabled, false otherwise. 35659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return true if the viewport is enabled, false otherwise. 35759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see #setEnabled(boolean) 35859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 35959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public boolean isEnabled() { 36059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return enabled; 36159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 36259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 36359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta} 364