org.scijava.java3d.RenderingAttributes Maven / Gradle / Ivy
/*
* Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*
*/
package org.scijava.java3d;
/**
* The RenderingAttributes object defines common rendering attributes
* for all primitive types. The rendering attributes are:
*
* - Depth test function - used to compare the incoming (source) depth of
* each pixel with depth of the pixel stored in frame buffer. If the test
* passes, the pixel is written, otherwise the pixel is not written. The depth test
* function is set with the
setDepthTestFunction
* method. By default, LESS_OR_EQUAL is the function used. The depth test
* function is one of the following:
*
* - ALWAYS - pixels are always drawn, irrespective of the depth
* value. This effectively disables depth testing.
*
*
- NEVER - pixels are never drawn, irrespective of the depth
* value.
*
*
- EQUAL - pixels are drawn if the incoming pixel depth is equal
* to the stored pixel depth in the frame buffer.
*
*
- NOT_EQUAL - pixels are drawn if the incoming pixel depth is
* not equal to the stored pixel depth in the frame buffer.
*
*
- LESS - pixels are drawn if the incoming pixel depth is less
* than the stored pixel depth in the frame buffer.
*
*
- LESS_OR_EQUAL - pixels are drawn if the incoming pixel depth
* is less than or equal to the stored pixel depth in the frame buffer.
* This is the default setting.
*
*
- GREATER - pixels are drawn if the incoming pixel depth is greater
* than the stored pixel depth in the frame buffer.
*
*
- GREATER_OR_EQUAL - pixels are drawn if the incoming pixel depth
* is greater than or equal to the stored pixel depth in the frame buffer.
*
*
* - Alpha test function - used to compare the incoming (source) alpha value
* of each pixel with the alpha test value. If the test passes, the pixel is
* written, otherwise the pixel is not written. The alpha test
* function is set with the
setAlphaTestFunction
* method. The alpha test
* function is one of the following:
*
* - ALWAYS - pixels are always drawn, irrespective of the alpha
* value. This effectively disables alpha testing.
* This is the default setting.
*
*
- NEVER - pixels are never drawn, irrespective of the alpha
* value.
*
*
- EQUAL - pixels are drawn if the incoming pixel alpha value is equal
* to the alpha test value.
*
*
- NOT_EQUAL - pixels are drawn if the incoming pixel alpha value is
* not equal to the alpha test value.
*
*
- LESS - pixels are drawn if the incoming pixel alpha value is less
* than the alpha test value.
*
*
- LESS_OR_EQUAL - pixels are drawn if the incoming pixel alpha value
* is less than or equal to the alpha test value.
*
*
- GREATER - pixels are drawn if the incoming pixel alpha value is greater
* than the alpha test value.
*
*
- GREATER_OR_EQUAL - pixels are drawn if the incoming pixel alpha
* value is greater than or equal to the alpha test value.
*
*
* - Alpha test value - the test value used by the alpha test function.
* This value is compared to the alpha value of each rendered pixel.
* The alpha test value is set with the
setAlphaTestValue
* method. The default alpha test value is 0.0.
*
*
- Raster operation - the raster operation function for this
* RenderingAttributes component object. The raster operation is
* set with the
setRasterOp
method. The raster operation
* is enabled or disabled with the setRasterOpEnable
* method. The raster operation is one of the following:
*
* - ROP_CLEAR - DST = 0.
* - ROP_AND DST = SRC & DST.
* - ROP_AND_REVERSE DST = SRC & ~DST.
* - ROP_COPY - DST = SRC. This is the default operation.
* - ROP_AND_INVERTED - DST = ~SRC & DST.
* - ROP_NOOP - DST = DST.
* - ROP_XOR - DST = SRC ^ DST.
* - ROP_OR - DST = DST | SRC.
* - ROP_NOR - DST = ~( DST | SRC .)
* - ROP_EQUIV - DST = ~( DST ^ SRC .)
* - ROP_INVERT - DST = ~DST.
* - ROP_OR_REVERSE - DST = src | ~DST.
* - ROP_COPY_INVERTED - DST = ~SRC.
* - ROP_OR_INVERTED - DST = ~SRC | DST.
* - ROP_NAND - DST = ~(SRC & DST.)
* - ROP_SET - DST = 1.
*
* - Vertex colors - vertex colors can be ignored for this
* RenderingAttributes object. This capability is set with the
*
setIgnoreVertexColors
method. If
* ignoreVertexColors is false, per-vertex colors are used, when
* present in the associated geometry objects, taking
* precedence over the ColoringAttributes color and the
* specified Material color(s). If ignoreVertexColors is true, per-vertex
* colors are ignored. In this case, if lighting is enabled, the
* Material diffuse color will be used as the object color.
* if lighting is disabled, the ColoringAttributes color is
* used. The default value is false.
*
*
- Visibility flag - when set, invisible objects are
* not rendered (subject to the visibility policy for
* the current view), but they can be picked or collided with.
* This flag is set with the
setVisible
* method. By default, the visibility flag is true.
*
*
- Depth buffer - can be enabled or disabled for this
* RenderingAttributes component object. The
*
setDepthBufferEnable
method enables
* or disabled the depth buffer. The
* setDepthBufferWriteEnable
method enables or disables
* writing the depth buffer for this object. During the transparent
* rendering pass, this attribute can be overridden by the
* depthBufferFreezeTransparent attribute in the View
* object. Transparent objects include BLENDED transparent and
* antialiased lines and points. Transparent objects do not
* include opaque objects or primitives rendered with
* SCREEN_DOOR transparency. By default, the depth buffer
* is enabled and the depth buffer write is enabled.
*
*
- Stencil buffer - can be enabled or disabled for this RenderingAttributes
* component object using the
setStencilEnable
method. If the
* stencil buffer is disabled, the stencil operation and function are ignored.
* If a scene graph is rendered on a Canvas3D that does not have a stencil
* buffer, the stencil buffer will be implicitly disabled for that
* canvas.
*
*
- Stencil write mask - mask that controls which bits of the stencil
* buffer are written when the stencil buffer is enabled. The default value is
*
~0
(all ones).
*
*
- Stencil operation - a set of three stencil operations performed
* when: 1) the stencil test fails; 2) the stencil test passes, but
* the depth test fails; or 3) both the stencil test and depth test pass.
* The stencil operations are set with the
setStencilOp
* method. The stencil operation is one of the following:
*
* - STENCIL_KEEP - keeps the current value (no operation performed).
* This is the default setting.
* - STENCIL_ZERO - Sets the stencil buffer value to 0.
* - STENCIL_REPLACE - Sets the stencil buffer value to
*
refValue
, as specified by setStencilFunction
.
* - STENCIL_INCR - Increments the current stencil buffer value.
* - STENCIL_DECR - Decrements the current stencil buffer value.
* - STENCIL_INVERT - Bitwise inverts the current stencil buffer value.
*
*
* - Stencil test function - used to compare the stencil reference value with
* the per-pixel stencil value stored in the frame buffer. If the test passes,
* the pixel is written, otherwise the pixel is not written. The stencil
* test function, reference value, and comparison mask are set with the
*
setStencilFunction
method. The stencil comparison mask is
* bitwise-ANDed with both the stencil reference value and the stored stencil
* value prior to doing the comparison. The default value for the reference value
* is 0. The default value for the comparison mask is ~0
(all ones).
* The stencil test function is one of the following:
*
* - ALWAYS - pixels are always drawn, irrespective of the stencil
* value. This effectively disables stencil testing.
* This is the default setting.
*
*
- NEVER - pixels are never drawn, irrespective of the stencil
* value.
*
*
- EQUAL - pixels are drawn if the stencil reference value is equal
* to the stored stencil value in the frame buffer.
*
*
- NOT_EQUAL - pixels are drawn if the stencil reference value is
* not equal to the stored stencil value in the frame buffer.
*
*
- LESS - pixels are drawn if the stencil reference value is less
* than the stored stencil value in the frame buffer.
*
*
- LESS_OR_EQUAL - pixels are drawn if the stencil reference value
* is less than or equal to the stored stencil value in the frame buffer.
*
*
- GREATER - pixels are drawn if the stencil reference value is greater
* than the stored stencil value in the frame buffer.
*
*
- GREATER_OR_EQUAL - pixels are drawn if the stencil reference value
* is greater than or equal to the stored stencil value in the frame buffer.
*
*
*
*
* Note: the alpha test, depth test, and stencil functions all use
* the same enums.
*
* @see Appearance
*/
public class RenderingAttributes extends NodeComponent {
/**
* Specifies that this RenderingAttributes object
* allows reading its alpha test value component information.
*/
public static final int
ALLOW_ALPHA_TEST_VALUE_READ = CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_ALPHA_TEST_VALUE_READ;
/**
* Specifies that this RenderingAttributes object
* allows writing its alpha test value component information.
*/
public static final int
ALLOW_ALPHA_TEST_VALUE_WRITE = CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_ALPHA_TEST_VALUE_WRITE;
/**
* Specifies that this RenderingAttributes object
* allows reading its alpha test function component information.
*/
public static final int
ALLOW_ALPHA_TEST_FUNCTION_READ = CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_ALPHA_TEST_FUNCTION_READ;
/**
* Specifies that this RenderingAttributes object
* allows writing its alpha test function component information.
*/
public static final int
ALLOW_ALPHA_TEST_FUNCTION_WRITE = CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_ALPHA_TEST_FUNCTION_WRITE;
/**
* Specifies that this RenderingAttributes object
* allows reading its depth test function component information.
*
* @since Java 3D 1.4
*/
public static final int
ALLOW_DEPTH_TEST_FUNCTION_READ = CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_DEPTH_TEST_FUNCTION_READ;
/**
* Specifies that this RenderingAttributes object
* allows writing its depth test function component information.
*
* @since Java 3D 1.4
*/
public static final int
ALLOW_DEPTH_TEST_FUNCTION_WRITE = CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_DEPTH_TEST_FUNCTION_WRITE;
/**
* Specifies that this RenderingAttributes object
* allows reading its depth buffer enable and depth buffer write enable
* component information.
*/
public static final int
ALLOW_DEPTH_ENABLE_READ = CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_DEPTH_ENABLE_READ;
/**
* Specifies that this RenderingAttributes object
* allows writing its depth buffer enable and depth buffer write enable
* component information.
*
* @since Java 3D 1.3
*/
public static final int ALLOW_DEPTH_ENABLE_WRITE =
CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_DEPTH_ENABLE_WRITE;
/**
* Specifies that this RenderingAttributes object
* allows reading its visibility information.
*
* @since Java 3D 1.2
*/
public static final int ALLOW_VISIBLE_READ =
CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_VISIBLE_READ;
/**
* Specifies that this RenderingAttributes object
* allows writing its visibility information.
*
* @since Java 3D 1.2
*/
public static final int ALLOW_VISIBLE_WRITE =
CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_VISIBLE_WRITE;
/**
* Specifies that this RenderingAttributes object
* allows reading its ignore vertex colors information.
*
* @since Java 3D 1.2
*/
public static final int ALLOW_IGNORE_VERTEX_COLORS_READ =
CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_IGNORE_VERTEX_COLORS_READ;
/**
* Specifies that this RenderingAttributes object
* allows writing its ignore vertex colors information.
*
* @since Java 3D 1.2
*/
public static final int ALLOW_IGNORE_VERTEX_COLORS_WRITE =
CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_IGNORE_VERTEX_COLORS_WRITE;
/**
* Specifies that this RenderingAttributes object
* allows reading its raster operation information.
*
* @since Java 3D 1.2
*/
public static final int ALLOW_RASTER_OP_READ =
CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_RASTER_OP_READ;
/**
* Specifies that this RenderingAttributes object
* allows writing its raster operation information.
*
* @since Java 3D 1.2
*/
public static final int ALLOW_RASTER_OP_WRITE =
CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_RASTER_OP_WRITE;
/**
* Specifies that this RenderingAttributes object allows reading
* its stencil enable, stencil op, stencil function, and
* stencil write mask information.
*
* @since Java 3D 1.4
*/
public static final int ALLOW_STENCIL_ATTRIBUTES_READ =
CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_STENCIL_ATTRIBUTES_READ;
/**
* Specifies that this RenderingAttributes object allows writing
* its stencil enable, stencil op, stencil function, and
* stencil write mask information.
*
* @since Java 3D 1.4
*/
public static final int ALLOW_STENCIL_ATTRIBUTES_WRITE =
CapabilityBits.RENDERING_ATTRIBUTES_ALLOW_STENCIL_ATTRIBUTES_WRITE;
//
// Enums for alpha test, depth test, and stencil test
//
/**
* Specifies that pixels are always drawn irrespective of the
* values being tested.
* Can be used to specify the alpha test function, the depth test function,
* or the stencil function.
* This setting effectively disables alpha, depth, or stencil testing.
*
* @see #setAlphaTestFunction
* @see #setDepthTestFunction
* @see #setStencilFunction(int,int,int)
*/
public static final int ALWAYS = 0;
/**
* Specifies that pixels are never drawn irrespective of the
* values being tested.
* Can be used to specify the alpha test function, the depth test function,
* or the stencil function.
*
* @see #setAlphaTestFunction
* @see #setDepthTestFunction
* @see #setStencilFunction(int,int,int)
*/
public static final int NEVER = 1;
/**
* Specifies that pixels are drawn if the two values being tested are equal.
* Can be used to specify the alpha test function, the depth test function,
* or the stencil function.
*
* @see #setAlphaTestFunction
* @see #setDepthTestFunction
* @see #setStencilFunction(int,int,int)
*/
public static final int EQUAL = 2;
/**
* Specifies that pixels are drawn if the two values being tested are not equal.
* Can be used to specify the alpha test function, the depth test function,
* or the stencil function.
*
* @see #setAlphaTestFunction
* @see #setDepthTestFunction
* @see #setStencilFunction(int,int,int)
*/
public static final int NOT_EQUAL = 3;
/**
* Specifies that pixels are drawn if the source/reference value is less
* than the destination/test value.
* Can be used to specify the alpha test function, the depth test function,
* or the stencil function.
*
* @see #setAlphaTestFunction
* @see #setDepthTestFunction
* @see #setStencilFunction(int,int,int)
*/
public static final int LESS = 4;
/**
* Specifies that pixels are drawn if the source/reference value is less
* than or equal to the destination/test value.
* Can be used to specify the alpha test function, the depth test function,
* or the stencil function.
*
* @see #setAlphaTestFunction
* @see #setDepthTestFunction
* @see #setStencilFunction(int,int,int)
*/
public static final int LESS_OR_EQUAL = 5;
/**
* Specifies that pixels are drawn if the source/reference value is greater
* than the destination/test value.
* Can be used to specify the alpha test function, the depth test function,
* or the stencil function.
*
* @see #setAlphaTestFunction
* @see #setDepthTestFunction
* @see #setStencilFunction(int,int,int)
*/
public static final int GREATER = 6;
/**
* Specifies that pixels are drawn if the source/reference value is greater
* than or equal to the destination/test value.
* Can be used to specify the alpha test function, the depth test function,
* or the stencil function.
*
* @see #setAlphaTestFunction
* @see #setDepthTestFunction
* @see #setStencilFunction(int,int,int)
*/
public static final int GREATER_OR_EQUAL = 7;
//
// Raster op enums
//
/**
* Raster operation: DST = 0
.
* @see #setRasterOp
*
* @since Java 3D 1.4
*/
public static final int ROP_CLEAR = 0x0;
/**
* Raster operation: DST = SRC & DST
.
* @see #setRasterOp
*
* @since Java 3D 1.4
*/
public static final int ROP_AND = 0x1;
/**
* Raster operation: DST = SRC & ~DST
.
* @see #setRasterOp
*
* @since Java 3D 1.4
*/
public static final int ROP_AND_REVERSE = 0x2;
/**
* Raster operation: DST = SRC
.
* @see #setRasterOp
*
* @since Java 3D 1.2
*/
public static final int ROP_COPY = 0x3;
/**
* Raster operation: DST = ~SRC & DST
.
* @see #setRasterOp
*
* @since Java 3D 1.4
*/
public static final int ROP_AND_INVERTED = 0x4;
/**
* Raster operation: DST = DST
.
* @see #setRasterOp
*
* @since Java 3D 1.4
*/
public static final int ROP_NOOP = 0x5;
/**
* Raster operation: DST = SRC ^ DST
.
* @see #setRasterOp
*
* @since Java 3D 1.2
*/
public static final int ROP_XOR = 0x6;
/**
* Raster operation: DST = DST | SRC
.
* @see #setRasterOp
*
* @since Java 3D 1.4
*/
public static final int ROP_OR = 0x7;
/**
* Raster operation: DST = ~( DST | SRC )
.
* @see #setRasterOp
*
* @since Java 3D 1.4
*/
public static final int ROP_NOR = 0x8;
/**
* Raster operation: DST = ~( DST ^ SRC )
.
* @see #setRasterOp
*
* @since Java 3D 1.4
*/
public static final int ROP_EQUIV = 0x9;
/**
* Raster operation: DST = ~DST
.
* @see #setRasterOp
*
* @since Java 3D 1.4
*/
public static final int ROP_INVERT = 0xA;
/**
* Raster operation: DST = src | ~DST
.
* @see #setRasterOp
*
* @since Java 3D 1.4
*/
public static final int ROP_OR_REVERSE = 0xB;
/**
* Raster operation: DST = ~SRC
.
* @see #setRasterOp
*
* @since Java 3D 1.4
*/
public static final int ROP_COPY_INVERTED = 0xC;
/**
* Raster operation: DST = ~SRC | DST
.
* @see #setRasterOp
*
* @since Java 3D 1.4
*/
public static final int ROP_OR_INVERTED = 0xD;
/**
* Raster operation: DST = ~(SRC & DST)
.
* @see #setRasterOp
*
* @since Java 3D 1.4
*/
public static final int ROP_NAND = 0xE;
/**
* Raster operation: DST = 1
.
* @see #setRasterOp
*
* @since Java 3D 1.4
*/
public static final int ROP_SET = 0xF;
//
// Stencil op enums
//
/**
* Stencil operation: DST = DST
* @see #setStencilOp(int,int,int)
*
* @since Java 3D 1.4
*/
public static final int STENCIL_KEEP = 1;
/**
* Stencil operation: DST = 0
* @see #setStencilOp(int,int,int)
*
* @since Java 3D 1.4
*/
public static final int STENCIL_ZERO = 2;
/**
* Stencil operation: DST = REF
* @see #setStencilOp(int,int,int)
*
* @since Java 3D 1.4
*/
public static final int STENCIL_REPLACE = 3;
/**
* Stencil operation: DST = DST + 1
* @see #setStencilOp(int,int,int)
*
* @since Java 3D 1.4
*/
public static final int STENCIL_INCR = 4;
/**
* Stencil operation: DST = DST - 1
* @see #setStencilOp(int,int,int)
*
* @since Java 3D 1.4
*/
public static final int STENCIL_DECR = 5;
/**
* Stencil operation: DST = ~DST
* @see #setStencilOp(int,int,int)
*
* @since Java 3D 1.4
*/
public static final int STENCIL_INVERT = 6;
// Array for setting default read capabilities
private static final int[] readCapabilities = {
ALLOW_ALPHA_TEST_FUNCTION_READ,
ALLOW_ALPHA_TEST_VALUE_READ,
ALLOW_DEPTH_ENABLE_READ,
ALLOW_DEPTH_TEST_FUNCTION_READ,
ALLOW_IGNORE_VERTEX_COLORS_READ,
ALLOW_RASTER_OP_READ,
ALLOW_STENCIL_ATTRIBUTES_READ,
ALLOW_VISIBLE_READ
};
/**
* Constructs a RenderingAttributes object with default parameters.
* The default values are as follows:
*
* depth buffer enable : true
* depth buffer write enable : true
* alpha test function : ALWAYS
* alpha test value : 0.0f
* visible : true
* ignore vertex colors : false
* raster operation enable : false
* raster operation : ROP_COPY
* depth test: LESS_OR_EQUAL
* stencil enable : false
* stencil write mask : ~0 (all ones)
* stencil op - failOp : STENCIL_KEEP
* stencil op - zFailOp : STENCIL_KEEP
* stencil op - zPassOp : STENCIL_KEEP
* stencil function : ALWAYS
* stencil reference value : 0
* stencil comparison mask : ~0 (all ones)
*
*/
public RenderingAttributes() {
// Just use default attributes
// set default read capabilities
setDefaultReadCapabilities(readCapabilities);
}
/**
* Constructs a RenderingAttributes object with specified values.
* @param depthBufferEnable a flag to turn depth buffer on/off
* @param depthBufferWriteEnable a flag to to make depth buffer
* read/write or read only
* @param alphaTestValue the alpha test reference value
* @param alphaTestFunction the function for comparing alpha values
*/
public RenderingAttributes(boolean depthBufferEnable,
boolean depthBufferWriteEnable,
float alphaTestValue,
int alphaTestFunction){
this(depthBufferEnable, depthBufferWriteEnable, alphaTestValue,
alphaTestFunction, true, false, false, ROP_COPY);
}
/**
* Constructs a RenderingAttributes object with specified values
* @param depthBufferEnable a flag to turn depth buffer on/off
* @param depthBufferWriteEnable a flag to make depth buffer
* read/write or read only
* @param alphaTestValue the alpha test reference value
* @param alphaTestFunction the function for comparing alpha values
* @param visible a flag that specifies whether the object is visible
* @param ignoreVertexColors a flag to enable or disable
* the ignoring of per-vertex colors
* @param rasterOpEnable a flag that specifies whether logical
* raster operations are enabled for this RenderingAttributes object.
* This disables all alpha blending operations.
* @param rasterOp the logical raster operation, one of:
* ROP_CLEAR, ROP_AND, ROP_AND_REVERSE, ROP_COPY, ROP_AND_INVERTED,
* ROP_NOOP, ROP_XOR, ROP_OR, ROP_NOR, ROP_EQUIV, ROP_INVERT,
* ROP_OR_REVERSE, ROP_COPY_INVERTED, ROP_OR_INVERTED, ROP_NAND or ROP_SET
*
* @since Java 3D 1.2
*/
public RenderingAttributes(boolean depthBufferEnable,
boolean depthBufferWriteEnable,
float alphaTestValue,
int alphaTestFunction,
boolean visible,
boolean ignoreVertexColors,
boolean rasterOpEnable,
int rasterOp) {
// set default read capabilities
setDefaultReadCapabilities(readCapabilities);
((RenderingAttributesRetained)this.retained).initDepthBufferEnable(depthBufferEnable);
((RenderingAttributesRetained)this.retained).initDepthBufferWriteEnable(depthBufferWriteEnable);
((RenderingAttributesRetained)this.retained).initAlphaTestValue(alphaTestValue);
((RenderingAttributesRetained)this.retained).initAlphaTestFunction(alphaTestFunction);
((RenderingAttributesRetained)this.retained).initVisible(visible);
((RenderingAttributesRetained)this.retained).initIgnoreVertexColors(ignoreVertexColors);
((RenderingAttributesRetained)this.retained).initRasterOpEnable(rasterOpEnable);
((RenderingAttributesRetained)this.retained).initRasterOp(rasterOp);
}
/**
* Enables or disables depth buffer mode for this RenderingAttributes
* component object.
*
* @param state true or false to enable or disable depth buffer mode
*
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @see GraphicsConfigTemplate3D#setDepthSize
*/
public void setDepthBufferEnable(boolean state){
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_DEPTH_ENABLE_WRITE))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes0"));
if (isLive())
((RenderingAttributesRetained)this.retained).setDepthBufferEnable(state);
else
((RenderingAttributesRetained)this.retained).initDepthBufferEnable(state);
}
/**
* Retrieves the state of zBuffer Enable flag
* @return true if depth buffer mode is enabled, false
* if depth buffer mode is disabled
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*/
public boolean getDepthBufferEnable(){
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_DEPTH_ENABLE_READ))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes1"));
return ((RenderingAttributesRetained)this.retained).getDepthBufferEnable();
}
/**
* Enables or disables writing the depth buffer for this object.
* During the transparent rendering pass,
* this attribute can be overridden by
* the depthBufferFreezeTransparent attribute in the View object.
* @param state true or false to enable or disable depth buffer Write mode
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
* @see View#setDepthBufferFreezeTransparent
*/
public void setDepthBufferWriteEnable(boolean state) {
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_DEPTH_ENABLE_WRITE))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes2"));
if (isLive())
((RenderingAttributesRetained)this.retained).setDepthBufferWriteEnable(state);
else
((RenderingAttributesRetained)this.retained).initDepthBufferWriteEnable(state);
}
/**
* Retrieves the state of Depth Buffer Write Enable flag.
* @return true if depth buffer is writable, false
* if depth buffer is read-only
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*/
public boolean getDepthBufferWriteEnable(){
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_DEPTH_ENABLE_READ))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes3"));
return ((RenderingAttributesRetained)this.retained).getDepthBufferWriteEnable();
}
/**
* Set alpha test value used by alpha test function. This value is
* compared to the alpha value of each rendered pixel.
* @param value the alpha test value
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*/
public void setAlphaTestValue(float value){
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_ALPHA_TEST_VALUE_WRITE))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes4"));
if (isLive())
((RenderingAttributesRetained)this.retained).setAlphaTestValue(value);
else
((RenderingAttributesRetained)this.retained).initAlphaTestValue(value);
}
/**
* Retrieves the alpha test value.
* @return the alpha test value.
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*/
public float getAlphaTestValue(){
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_ALPHA_TEST_VALUE_READ))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes5"));
return ((RenderingAttributesRetained)this.retained).getAlphaTestValue();
}
/**
* Set alpha test function. This function is used to compare
* each incoming (source) per-pixel alpha value with the alpha test value.
* If the test passes, the pixel is written otherwise the pixel is not
* written.
* @param function the new alpha test function. One of
* ALWAYS, NEVER, EQUAL, NOT_EQUAL, LESS, LESS_OR_EQUAL, GREATER,
* GREATER_OR_EQUAL
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*/
public void setAlphaTestFunction(int function){
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_ALPHA_TEST_FUNCTION_WRITE))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes6"));
if (isLive())
((RenderingAttributesRetained)this.retained).setAlphaTestFunction(function);
else
((RenderingAttributesRetained)this.retained).initAlphaTestFunction(function);
}
/**
* Retrieves current alpha test function.
* @return the current alpha test function
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*/
public int getAlphaTestFunction(){
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_ALPHA_TEST_FUNCTION_READ))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes7"));
return ((RenderingAttributesRetained)this.retained).getAlphaTestFunction();
}
/**
* Sets the visibility flag for this RenderingAttributes
* component object. Invisible objects are not rendered (subject to
* the visibility policy for the current view), but they can be picked
* or collided with. The default value is true.
* @param visible true or false to enable or disable visibility
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @see View#setVisibilityPolicy
*
* @since Java 3D 1.2
*/
public void setVisible(boolean visible) {
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_VISIBLE_WRITE))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes8"));
if (isLive())
((RenderingAttributesRetained)this.retained).setVisible(visible);
else
((RenderingAttributesRetained)this.retained).initVisible(visible);
}
/**
* Retrieves the visibility flag for this RenderingAttributes object.
* @return true if the object is visible; false
* if the object is invisible.
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @since Java 3D 1.2
*/
public boolean getVisible() {
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_VISIBLE_READ))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes9"));
return ((RenderingAttributesRetained)this.retained).getVisible();
}
/**
* Sets a flag that indicates whether vertex colors are ignored
* for this RenderingAttributes object. If
* ignoreVertexColors
is false, per-vertex
* colors are used, when present in the associated Geometry
* objects, taking precedence over the ColoringAttributes color
* and the specified Material color(s). If ignoreVertexColors
* is true, per-vertex colors are ignored. In this case, if
* lighting is enabled, the Material diffuse color will be
* used as the object color. If lighting is disabled, the
* ColoringAttributes color will be used. The default value is false.
*
* @param ignoreVertexColors true or false to enable or disable
* the ignoring of per-vertex colors
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @see ColoringAttributes
* @see Material
*
* @since Java 3D 1.2
*/
public void setIgnoreVertexColors(boolean ignoreVertexColors) {
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_IGNORE_VERTEX_COLORS_WRITE))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes12"));
if (isLive())
((RenderingAttributesRetained)this.retained).setIgnoreVertexColors(ignoreVertexColors);
else
((RenderingAttributesRetained)this.retained).initIgnoreVertexColors(ignoreVertexColors);
}
/**
* Retrieves the ignoreVertexColors flag for this
* RenderingAttributes object.
* @return true if per-vertex colors are ignored; false
* if per-vertex colors are used.
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @since Java 3D 1.2
*/
public boolean getIgnoreVertexColors() {
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_IGNORE_VERTEX_COLORS_READ))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes13"));
return ((RenderingAttributesRetained)this.retained).getIgnoreVertexColors();
}
/**
* Sets the rasterOp enable flag for this RenderingAttributes
* component object. When set to true, this enables logical
* raster operations as specified by the setRasterOp method.
* Enabling raster operations effectively disables alpha blending,
* which is used for transparency and antialiasing. Raster
* operations, especially XOR mode, are primarily useful when
* rendering to the front buffer in immediate mode. Most
* applications will not wish to enable this mode.
*
* @param rasterOpEnable true or false to enable or disable
* raster operations
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @see #setRasterOp
*
* @since Java 3D 1.2
*/
public void setRasterOpEnable(boolean rasterOpEnable) {
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_RASTER_OP_WRITE))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes10"));
if (isLive())
((RenderingAttributesRetained)this.retained).setRasterOpEnable(rasterOpEnable);
else
((RenderingAttributesRetained)this.retained).initRasterOpEnable(rasterOpEnable);
}
/**
* Retrieves the rasterOp enable flag for this RenderingAttributes
* object.
* @return true if raster operations are enabled; false
* if raster operations are disabled.
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @since Java 3D 1.2
*/
public boolean getRasterOpEnable() {
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_RASTER_OP_READ))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes11"));
return ((RenderingAttributesRetained)this.retained).getRasterOpEnable();
}
/**
* Sets the raster operation function for this RenderingAttributes
* component object.
*
* @param rasterOp the logical raster operation, one of:
* ROP_CLEAR, ROP_AND, ROP_AND_REVERSE, ROP_COPY, ROP_AND_INVERTED,
* ROP_NOOP, ROP_XOR, ROP_OR, ROP_NOR, ROP_EQUIV, ROP_INVERT,
* ROP_OR_REVERSE, ROP_COPY_INVERTED, ROP_OR_INVERTED, ROP_NAND or ROP_SET.
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @since Java 3D 1.2
*/
public void setRasterOp(int rasterOp) {
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_RASTER_OP_WRITE))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes10"));
if (isLive())
((RenderingAttributesRetained)this.retained).setRasterOp(rasterOp);
else
((RenderingAttributesRetained)this.retained).initRasterOp(rasterOp);
}
/**
* Retrieves the current raster operation for this RenderingAttributes
* object.
* @return one of:
* ROP_CLEAR, ROP_AND, ROP_AND_REVERSE, ROP_COPY, ROP_AND_INVERTED,
* ROP_NOOP, ROP_XOR, ROP_OR, ROP_NOR, ROP_EQUIV, ROP_INVERT,
* ROP_OR_REVERSE, ROP_COPY_INVERTED, ROP_OR_INVERTED, ROP_NAND or ROP_SET
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @since Java 3D 1.2
*/
public int getRasterOp() {
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_RASTER_OP_READ))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes11"));
return ((RenderingAttributesRetained)this.retained).getRasterOp();
}
/**
* Creates a retained mode RenderingAttributesRetained object that this
* RenderingAttributes component object will point to.
*/
@Override
void createRetained() {
this.retained = new RenderingAttributesRetained();
this.retained.setSource(this);
}
/**
* @deprecated replaced with cloneNodeComponent(boolean forceDuplicate)
*/
@Override
public NodeComponent cloneNodeComponent() {
RenderingAttributes ra = new RenderingAttributes();
ra.duplicateNodeComponent(this);
return ra;
}
/**
* Copies all node information from originalNodeComponent
into
* the current node. This method is called from the
* duplicateNode
method. This routine does
* the actual duplication of all "local data" (any data defined in
* this object).
*
* @param originalNodeComponent the original node to duplicate.
* @param forceDuplicate when set to true
, causes the
* duplicateOnCloneTree
flag to be ignored. When
* false
, the value of each node's
* duplicateOnCloneTree
variable determines whether
* NodeComponent data is duplicated or copied.
*
* @see Node#cloneTree
* @see NodeComponent#setDuplicateOnCloneTree
*/
@Override
void duplicateAttributes(NodeComponent originalNodeComponent,
boolean forceDuplicate) {
super.duplicateAttributes(originalNodeComponent, forceDuplicate);
RenderingAttributesRetained attr =
(RenderingAttributesRetained) originalNodeComponent.retained;
RenderingAttributesRetained rt =
(RenderingAttributesRetained) retained;
rt.initDepthBufferEnable(attr.getDepthBufferEnable());
rt.initDepthBufferWriteEnable(attr.getDepthBufferWriteEnable());
rt.initDepthTestFunction(attr.getDepthTestFunction());
rt.initAlphaTestValue(attr.getAlphaTestValue());
rt.initAlphaTestFunction(attr.getAlphaTestFunction());
rt.initVisible(attr.getVisible());
rt.initIgnoreVertexColors(attr.getIgnoreVertexColors());
rt.initRasterOpEnable(attr.getRasterOpEnable());
rt.initRasterOp(attr.getRasterOp());
rt.initStencilEnable(attr.getStencilEnable());
int[] ops = new int[3];
attr.getStencilOp(ops);
rt.initStencilOp(ops[0], ops[1], ops[2]);
attr.getStencilFunction(ops);
rt.initStencilFunction(ops[0], ops[1], ops[2]);
rt.initStencilWriteMask(attr.getStencilWriteMask());
}
/**
* Set depth test function. This function is used to compare each
* incoming (source) per-pixel depth test value with the stored per-pixel
* depth value in the frame buffer. If the test
* passes, the pixel is written, otherwise the pixel is not
* written.
* @param function the new depth test function. One of
* ALWAYS, NEVER, EQUAL, NOT_EQUAL, LESS, LESS_OR_EQUAL, GREATER,
* or GREATER_OR_EQUAL.
* The default value is LESS_OR_EQUAL.
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @since Java 3D 1.4
*/
public void setDepthTestFunction(int function){
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_DEPTH_TEST_FUNCTION_WRITE))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes14"));
if (isLive())
((RenderingAttributesRetained)this.retained).setDepthTestFunction(function);
else
((RenderingAttributesRetained)this.retained).initDepthTestFunction(function);
}
/**
* Retrieves current depth test function.
* @return the current depth test function
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @since Java 3D 1.4
*/
public int getDepthTestFunction(){
if (isLiveOrCompiled())
if (!this.getCapability(ALLOW_DEPTH_TEST_FUNCTION_READ))
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes15"));
return ((RenderingAttributesRetained)this.retained).getDepthTestFunction();
}
/**
* Enables or disables the stencil buffer for this RenderingAttributes
* component object. If the stencil buffer is disabled, the
* stencil operation and function are ignored. If a scene graph
* is rendered on a Canvas3D that does not have a stencil buffer,
* the stencil buffer will be implicitly disabled for that canvas.
*
* @param state true or false to enable or disable stencil buffer
* operations.
* If this is set to false, the stencilOp and stencilFunction parameters
* are not used.
*
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @see GraphicsConfigTemplate3D#setStencilSize
*
* @since Java 3D 1.4
*/
public void setStencilEnable(boolean state) {
if (isLiveOrCompiled()) {
if (!this.getCapability(ALLOW_STENCIL_ATTRIBUTES_WRITE)) {
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes16"));
}
}
if (isLive())
((RenderingAttributesRetained)this.retained).setStencilEnable(state);
else
((RenderingAttributesRetained)this.retained).initStencilEnable(state);
}
/**
* Retrieves the stencil buffer enable flag for this RenderingAttributes
* object.
*
* @return true if stencil buffer operations are enabled; false
* if stencil buffer operations are disabled.
*
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @since Java 3D 1.4
*/
public boolean getStencilEnable() {
if (isLiveOrCompiled()) {
if (!this.getCapability(ALLOW_STENCIL_ATTRIBUTES_READ)) {
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes17"));
}
}
return ((RenderingAttributesRetained)this.retained).getStencilEnable();
}
/**
* Sets the stencil operations for this RenderingAttributes object to the
* specified parameters.
*
* @param failOp operation performed when the stencil test fails, one of:
* STENCIL_KEEP, STENCIL_ZERO, STENCIL_REPLACE, STENCIL_INCR, STENCIL_DECR,
* or STENCIL_INVERT.
*
* @param zFailOp operation performed when the stencil test passes and the
* depth test fails, one of:
* STENCIL_KEEP, STENCIL_ZERO, STENCIL_REPLACE, STENCIL_INCR, STENCIL_DECR,
* or STENCIL_INVERT.
*
* @param zPassOp operation performed when both the stencil test and the
* depth test pass, one of:
* STENCIL_KEEP, STENCIL_ZERO, STENCIL_REPLACE, STENCIL_INCR, STENCIL_DECR,
* or STENCIL_INVERT.
*
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @since Java 3D 1.4
*/
public void setStencilOp(int failOp, int zFailOp, int zPassOp) {
if (isLiveOrCompiled()) {
if (!this.getCapability(ALLOW_STENCIL_ATTRIBUTES_WRITE)) {
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes16"));
}
}
if (isLive())
((RenderingAttributesRetained)this.retained).setStencilOp(failOp,
zFailOp,
zPassOp);
else
((RenderingAttributesRetained)this.retained).initStencilOp(failOp,
zFailOp,
zPassOp);
}
/**
* Sets the stencil operations for this RenderingAttributes object to the
* specified parameters.
*
* @param stencilOps an array of three integers that specifies the new
* set of stencil operations. Element 0 of the array specifies the
* failOp
parameter, element 1 specifies the
* zFailOp
parameter, and element 2 specifies the
* zPassOp
parameter.
*
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @see #setStencilOp(int,int,int)
*
* @since Java 3D 1.4
*/
public void setStencilOp(int[] stencilOps) {
if (isLiveOrCompiled()) {
if (!this.getCapability(ALLOW_STENCIL_ATTRIBUTES_WRITE)) {
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes16"));
}
}
if (isLive())
((RenderingAttributesRetained)this.retained).setStencilOp(stencilOps[0],
stencilOps[1],
stencilOps[2]);
else
((RenderingAttributesRetained)this.retained).initStencilOp(stencilOps[0],
stencilOps[1],
stencilOps[2]);
}
/**
* Retrieves the current set of stencil operations, and copies them
* into the specified array. The caller must ensure that this array
* has been allocated with enough space to hold the results.
*
* @param stencilOps array that will receive the current set of
* three stencil operations. The failOp
parameter is copied
* into element 0 of the array, the zFailOp
parameter is copied
* into element 1, and the zPassOp
parameter is copied
* into element 2.
*
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @since Java 3D 1.4
*/
public void getStencilOp(int[] stencilOps) {
if (isLiveOrCompiled()) {
if (!this.getCapability(ALLOW_STENCIL_ATTRIBUTES_READ)) {
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes17"));
}
}
((RenderingAttributesRetained)this.retained).getStencilOp(stencilOps);
}
/**
* Sets the stencil function, reference value, and comparison mask
* for this RenderingAttributes object to the specified parameters.
*
* @param function the stencil test function, used to compare the
* stencil reference value with the stored per-pixel
* stencil value in the frame buffer. If the test
* passes, the pixel is written, otherwise the pixel is not
* written. The stencil function is one of:
* ALWAYS, NEVER, EQUAL, NOT_EQUAL, LESS, LESS_OR_EQUAL, GREATER,
* or GREATER_OR_EQUAL.
*
* @param refValue the stencil reference value that is tested against
* the stored per-pixel stencil value
*
* @param compareMask a mask that limits which bits are compared; it is
* bitwise-ANDed with both the stencil reference value and the stored
* per-pixel stencil value before doing the comparison.
*
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @since Java 3D 1.4
*/
public void setStencilFunction(int function, int refValue, int compareMask) {
if (isLiveOrCompiled()) {
if (!this.getCapability(ALLOW_STENCIL_ATTRIBUTES_WRITE)) {
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes16"));
}
}
if (isLive())
((RenderingAttributesRetained)this.retained).setStencilFunction(function,
refValue,
compareMask);
else
((RenderingAttributesRetained)this.retained).initStencilFunction(function,
refValue,
compareMask);
}
/**
* Sets the stencil function, reference value, and comparison mask
* for this RenderingAttributes object to the specified parameters.
*
* @param params an array of three integers that specifies the new
* stencil function, reference value, and comparison mask.
* Element 0 of the array specifies the
* stencil function, element 1 specifies the
* reference value, and element 2 specifies the
* comparison mask.
*
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @see #setStencilFunction(int,int,int)
*
* @since Java 3D 1.4
*/
public void setStencilFunction(int[] params) {
if (isLiveOrCompiled()) {
if (!this.getCapability(ALLOW_STENCIL_ATTRIBUTES_WRITE)) {
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes16"));
}
}
if (isLive())
((RenderingAttributesRetained)this.retained).setStencilFunction(params[0],
params[1],
params[2]);
else
((RenderingAttributesRetained)this.retained).initStencilFunction(params[0],
params[1],
params[2]);
}
/**
* Retrieves the stencil function, reference value, and comparison mask,
* and copies them into the specified array. The caller must ensure
* that this array has been allocated with enough space to hold the results.
*
* @param params array that will receive the current stencil function,
* reference value, and comparison mask. The stencil function is copied
* into element 0 of the array, the reference value is copied
* into element 1, and the comparison mask is copied
* into element 2.
*
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @since Java 3D 1.4
*/
public void getStencilFunction(int[] params) {
if (isLiveOrCompiled()) {
if (!this.getCapability(ALLOW_STENCIL_ATTRIBUTES_READ)) {
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes17"));
}
}
((RenderingAttributesRetained)this.retained).getStencilFunction(params);
}
/**
* Sets the stencil write mask for this RenderingAttributes
* object. This mask controls which bits of the
* stencil buffer are written.
* The default value is ~0
(all ones).
*
* @param mask the new stencil write mask.
*
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @since Java 3D 1.4
*/
public void setStencilWriteMask(int mask) {
if (isLiveOrCompiled()) {
if (!this.getCapability(ALLOW_STENCIL_ATTRIBUTES_WRITE)) {
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes16"));
}
}
if (isLive())
((RenderingAttributesRetained)this.retained).setStencilWriteMask(mask);
else
((RenderingAttributesRetained)this.retained).initStencilWriteMask(mask);
}
/**
* Retrieves the current stencil write mask for this RenderingAttributes
* object.
*
* @return the stencil write mask.
*
* @exception CapabilityNotSetException if appropriate capability is
* not set and this object is part of live or compiled scene graph
*
* @since Java 3D 1.4
*/
public int getStencilWriteMask() {
if (isLiveOrCompiled()) {
if (!this.getCapability(ALLOW_STENCIL_ATTRIBUTES_READ)) {
throw new CapabilityNotSetException(J3dI18N.getString("RenderingAttributes17"));
}
}
return ((RenderingAttributesRetained)this.retained).getStencilWriteMask();
}
}