/** * Copyright (c) 2003-2009, Xith3D Project Group all rights reserved. * * Portions based on the Java3D interface, Copyright by Sun Microsystems. * Many thanks to the developers of Java3D and Sun Microsystems for their * innovation and design. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the 'Xith3D Project Group' nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) A * RISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE */ package org.xith3d.scenegraph; import org.jagatoo.opengl.enums.StencilFace; import org.jagatoo.opengl.enums.TestFunction; /** * This is an abstraction of the OpenGL function glStencilFuncSeparate(). * * @author Marvin Froehlich (aka Qudus) */ public class StencilFuncSeparate { private StencilFace face; private TestFunction func = TestFunction.ALWAYS; private int ref = 0; private int mask = ~0; /** * Specifies whether front and/or back stencil state is updated. * * @param face */ public final void setFace( StencilFace face ) { if ( face == null ) throw new NullPointerException( "face must not be null" ); this.face = face; } /** * Specifies whether front and/or back stencil state is updated. */ public final StencilFace getFace() { return ( face ); } /** * Specifies the test function. * The initial value is ALWAYS. * * @param func */ public final void setTestFunction( TestFunction func ) { if ( func == null ) throw new NullPointerException( "func must not be null" ); this.func = func; } /** * Specifies the test function. * The initial value is ALWAYS. */ public final TestFunction getTestFunction() { return ( func ); } /** * Specifies the reference value for the stencil test. * ref is clamped to the range [2, 2^n - 1], * where n is the number of bitplanes in the stencil buffer. * The initial value is 0. * * @param ref */ public final void setRef( int ref ) { if ( ref < 2 ) throw new IllegalArgumentException( "ref must be in range [2, 2^n - 1]." ); this.ref = ref; } /** * Specifies the reference value for the stencil test. * ref is clamped to the range [2, 2^n - 1], * where n is the number of bitplanes in the stencil buffer. * The initial value is 0. */ public final int getRef() { return ( ref ); } /** * Specifies a mask that is ANDed with both the reference value * and the stored stencil value when the test is done. * The initial value is all 1's. * * @param mask */ public final void setMask( int mask ) { this.mask = mask; } public final int getMask() { return ( mask ); } /** * Creates a new {@link StencilFuncSeparate}. * * @param face */ public StencilFuncSeparate( StencilFace face ) { this.setFace( face ); } /** * Creates a new {@link StencilFuncSeparate}. * * @param face * @param func */ public StencilFuncSeparate( StencilFace face, TestFunction func ) { this( face ); this.setTestFunction( func ); } /** * Creates a new {@link StencilFuncSeparate}. * * @param face * @param func * @param ref */ public StencilFuncSeparate( StencilFace face, TestFunction func, int ref ) { this( face, func ); this.setRef( ref ); } /** * Creates a new {@link StencilFuncSeparate}. * * @param face * @param func * @param ref * @param mask */ public StencilFuncSeparate( StencilFace face, TestFunction func, int ref, int mask ) { this( face, func, ref ); this.setMask( mask ); } }