diff options
author | Julien Gouesse <[email protected]> | 2015-11-28 15:11:48 +0100 |
---|---|---|
committer | Julien Gouesse <[email protected]> | 2015-11-28 15:11:48 +0100 |
commit | dbc98deea1884e44da2c74d6ea807253cdefa693 (patch) | |
tree | 29c3ee7dea82d7dd773d81f33f645dde67e43a17 /src/javax/media/j3d/AppearanceRetained.java | |
parent | 2c99f1329dc55bd496bce91b9aba956ecba3c67e (diff) |
Relocate package prefix to org.jogamp.java3d
Diffstat (limited to 'src/javax/media/j3d/AppearanceRetained.java')
-rw-r--r-- | src/javax/media/j3d/AppearanceRetained.java | 1413 |
1 files changed, 0 insertions, 1413 deletions
diff --git a/src/javax/media/j3d/AppearanceRetained.java b/src/javax/media/j3d/AppearanceRetained.java deleted file mode 100644 index 987e911..0000000 --- a/src/javax/media/j3d/AppearanceRetained.java +++ /dev/null @@ -1,1413 +0,0 @@ -/* - * Copyright 1996-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 javax.media.j3d; - -import java.util.ArrayList; - - -/** - * The Appearance object defines all rendering state that can be set - * as a component object of a Shape3D node. - */ -class AppearanceRetained extends NodeComponentRetained { - - // - // State variables: these should all be initialized to approproate - // Java 3D defaults. - // - - // Material object used when lighting is enabled - MaterialRetained material = null; - - // Texture object used to apply a texture map to an object - TextureRetained texture = null; - - // Texture coordinate generation object - TexCoordGenerationRetained texCoordGeneration = null; - - // Texture Attributes bundle object - TextureAttributesRetained textureAttributes = null; - - TextureUnitStateRetained texUnitState[] = null; - - // Coloring Attributes bundle object - ColoringAttributesRetained coloringAttributes = null; - - // Transparency Attributes bundle object - TransparencyAttributesRetained transparencyAttributes = null; - - // Rendering Attributes bundle object - RenderingAttributesRetained renderingAttributes = null; - - // Polygon Attributes bundle object - PolygonAttributesRetained polygonAttributes = null; - - // Line Attributes bundle object - LineAttributesRetained lineAttributes = null; - - // Point Attributes bundle object - PointAttributesRetained pointAttributes = null; - - - // Lock used for synchronization of live state - Object liveStateLock = new Object(); - - // NOTE: Consider grouping random state into common objects - - // Cache used during compilation. If map == compState, then - // mapAppearance can be used for this appearance - CompileState map = null; - AppearanceRetained mapAppearance = null; - - static final int MATERIAL = 0x0001; - static final int TEXTURE = 0x0002; - static final int TEXCOORD_GEN = 0x0004; - static final int TEXTURE_ATTR = 0x0008; - static final int COLOR = 0x0010; - static final int TRANSPARENCY = 0x0020; - static final int RENDERING = 0x0040; - static final int POLYGON = 0x0080; - static final int LINE = 0x0100; - static final int POINT = 0x0200; - static final int TEXTURE_UNIT_STATE = 0x0400; - - static final int ALL_SOLE_USERS = 0; - - // A pointer to the scene graph appearance object - AppearanceRetained sgApp = null; - - // The object level hashcode for this appearance - // int objHashCode = super.hashCode(); - - /** - * Set the material object to the specified object. - * @param material object that specifies the desired material - * @exception IllegalSharingException - * properties - */ - void setMaterial(Material material) { - - synchronized(liveStateLock) { - if (source.isLive()) { - - if (this.material != null) { - this.material.clearLive(refCount); - this.material.removeMirrorUsers(this); - } - if (material != null) { - ((MaterialRetained)material.retained).setLive(inBackgroundGroup, refCount); - // If appearance is live, then copy all the users of this - // appaearance as users of this material - ((MaterialRetained)material.retained).copyMirrorUsers(this); - } - sendMessage(MATERIAL, - (material != null ? - ((MaterialRetained)material.retained).mirror : null), true); - } - if (material == null) { - this.material = null; - } else { - this.material = (MaterialRetained)material.retained; - } - } - } - - /** - * Retrieve the current material object. - * @return the material object - */ - Material getMaterial() { - return (material == null ? null : (Material)material.source); - } - - /** - * Sets the texture object to the specified object. - * @param texture object that specifies the desired texture - * map and texture parameters - */ - void setTexture(Texture texture) { - synchronized(liveStateLock) { - if (source.isLive()) { - - if (this.texture != null) { - this.texture.clearLive(refCount); - this.texture.removeMirrorUsers(this); - } - - if (texture != null) { - ((TextureRetained)texture.retained).setLive(inBackgroundGroup, refCount); - ((TextureRetained)texture.retained).copyMirrorUsers(this); - } - sendMessage(TEXTURE, - (texture != null ? - ((TextureRetained)texture.retained).mirror : null), true); - - } - - - if (texture == null) { - this.texture = null; - } else { - this.texture = (TextureRetained)texture.retained; - } - } - } - - /** - * Retrieves the current texture object. - * @return the texture object - */ - Texture getTexture() { - return (texture == null ? null : (Texture)texture.source); - } - - /** - * Sets the textureAttrbutes object to the specified object. - * @param textureAttributes object that specifies the desired texture - * attributes - */ - void setTextureAttributes(TextureAttributes textureAttributes) { - - synchronized(liveStateLock) { - if (source.isLive()) { - - if (this.textureAttributes != null) { - this.textureAttributes.clearLive(refCount); - this.textureAttributes.removeMirrorUsers(this); - } - - if (textureAttributes != null) { - ((TextureAttributesRetained)textureAttributes.retained).setLive(inBackgroundGroup, refCount); - ((TextureAttributesRetained)textureAttributes.retained).copyMirrorUsers(this); - } - sendMessage(TEXTURE_ATTR, - (textureAttributes != null ? - ((TextureAttributesRetained)textureAttributes.retained).mirror: - null), true); - - } - - - if (textureAttributes == null) { - this.textureAttributes = null; - } else { - this.textureAttributes = (TextureAttributesRetained)textureAttributes.retained; - } - } - } - - /** - * Retrieves the current textureAttributes object. - * @return the textureAttributes object - */ - TextureAttributes getTextureAttributes() { - return (textureAttributes == null ? null : - (TextureAttributes)textureAttributes.source); - } - - /** - * Sets the coloringAttrbutes object to the specified object. - * @param coloringAttributes object that specifies the desired texture - * attributes - */ - void setColoringAttributes(ColoringAttributes coloringAttributes) { - - synchronized(liveStateLock) { - if (source.isLive()) { - - if (this.coloringAttributes != null) { - this.coloringAttributes.clearLive(refCount); - this.coloringAttributes.removeMirrorUsers(this); - } - - if (coloringAttributes != null) { - ((ColoringAttributesRetained)coloringAttributes.retained).setLive(inBackgroundGroup, refCount); - ((ColoringAttributesRetained)coloringAttributes.retained).copyMirrorUsers(this); - } - sendMessage(COLOR, - (coloringAttributes != null ? - ((ColoringAttributesRetained)coloringAttributes.retained).mirror: - null), true); - } - - - if (coloringAttributes == null) { - this.coloringAttributes = null; - } else { - this.coloringAttributes = (ColoringAttributesRetained)coloringAttributes.retained; - } - } - } - - /** - * Retrieves the current coloringAttributes object. - * @return the coloringAttributes object - */ - ColoringAttributes getColoringAttributes() { - return (coloringAttributes == null ? null : - (ColoringAttributes)coloringAttributes.source); - } - - /** - * Sets the transparencyAttrbutes object to the specified object. - * @param transparencyAttributes object that specifies the desired texture - * attributes - */ - void setTransparencyAttributes(TransparencyAttributes transparencyAttributes) { - - synchronized(liveStateLock) { - if (source.isLive()) { - - if (this.transparencyAttributes != null) { - this.transparencyAttributes.clearLive(refCount); - this.transparencyAttributes.removeMirrorUsers(this); - } - - if (transparencyAttributes != null) { - ((TransparencyAttributesRetained)transparencyAttributes.retained).setLive(inBackgroundGroup, refCount); - ((TransparencyAttributesRetained)transparencyAttributes.retained).copyMirrorUsers(this); - } - - sendMessage(TRANSPARENCY, - (transparencyAttributes != null ? - ((TransparencyAttributesRetained)transparencyAttributes.retained).mirror: null), true); - } - - - if (transparencyAttributes == null) { - this.transparencyAttributes = null; - } else { - this.transparencyAttributes = (TransparencyAttributesRetained)transparencyAttributes.retained; - - } - } - } - - /** - * Retrieves the current transparencyAttributes object. - * @return the transparencyAttributes object - */ - TransparencyAttributes getTransparencyAttributes() { - return (transparencyAttributes == null ? null : - (TransparencyAttributes)transparencyAttributes.source); - } - - /** - * Sets the renderingAttrbutes object to the specified object. - * @param renderingAttributes object that specifies the desired texture - * attributes - */ - void setRenderingAttributes(RenderingAttributes renderingAttributes) { - - synchronized(liveStateLock) { - if (source.isLive()) { - if (this.renderingAttributes != null) { - this.renderingAttributes.clearLive(refCount); - this.renderingAttributes.removeMirrorUsers(this); - } - - if (renderingAttributes != null) { - ((RenderingAttributesRetained)renderingAttributes.retained).setLive(inBackgroundGroup, refCount); - ((RenderingAttributesRetained)renderingAttributes.retained).copyMirrorUsers(this); - } - Object m = null; - boolean v = true; - if (renderingAttributes != null) { - m = ((RenderingAttributesRetained)renderingAttributes.retained).mirror; - v = ((RenderingAttributesRetained)renderingAttributes.retained).visible; - } - sendMessage(RENDERING,m, v); - // Also need to send a message to GeometryStructure. - sendRenderingAttributesChangedMessage( v); - } - if (renderingAttributes == null) { - this.renderingAttributes = null; - } else { - this.renderingAttributes = (RenderingAttributesRetained)renderingAttributes.retained; - - } - } - } - - /** - * Retrieves the current renderingAttributes object. - * @return the renderingAttributes object - */ - RenderingAttributes getRenderingAttributes() { - if (renderingAttributes == null) - return null; - - return (RenderingAttributes)renderingAttributes.source; - } - - /** - * Sets the polygonAttrbutes object to the specified object. - * @param polygonAttributes object that specifies the desired texture - * attributes - */ - void setPolygonAttributes(PolygonAttributes polygonAttributes) { - - synchronized(liveStateLock) { - if (source.isLive()) { - if (this.polygonAttributes != null) { - this.polygonAttributes.clearLive(refCount); - this.polygonAttributes.removeMirrorUsers(this); - } - - if (polygonAttributes != null) { - ((PolygonAttributesRetained)polygonAttributes.retained).setLive(inBackgroundGroup, refCount); - ((PolygonAttributesRetained)polygonAttributes.retained).copyMirrorUsers(this); - } - sendMessage(POLYGON, - (polygonAttributes != null ? - ((PolygonAttributesRetained)polygonAttributes.retained).mirror : - null), true); - - } - - if (polygonAttributes == null) { - this.polygonAttributes = null; - } else { - this.polygonAttributes = (PolygonAttributesRetained)polygonAttributes.retained; - } - } - } - - /** - * Retrieves the current polygonAttributes object. - * @return the polygonAttributes object - */ - PolygonAttributes getPolygonAttributes() { - return (polygonAttributes == null ? null: - (PolygonAttributes)polygonAttributes.source); - } - - /** - * Sets the lineAttrbutes object to the specified object. - * @param lineAttributes object that specifies the desired texture - * attributes - */ - void setLineAttributes(LineAttributes lineAttributes) { - - synchronized(liveStateLock) { - if (source.isLive()) { - - if (this.lineAttributes != null) { - this.lineAttributes.clearLive(refCount); - this.lineAttributes.removeMirrorUsers(this); - } - - if (lineAttributes != null) { - ((LineAttributesRetained)lineAttributes.retained).setLive(inBackgroundGroup, refCount); - ((LineAttributesRetained)lineAttributes.retained).copyMirrorUsers(this); - } - sendMessage(LINE, - (lineAttributes != null ? - ((LineAttributesRetained)lineAttributes.retained).mirror: null), true); - } - - - if (lineAttributes == null) { - this.lineAttributes = null; - } else { - this.lineAttributes = (LineAttributesRetained)lineAttributes.retained; - } - } - } - - /** - * Retrieves the current lineAttributes object. - * @return the lineAttributes object - */ - LineAttributes getLineAttributes() { - return (lineAttributes == null ? null : - (LineAttributes)lineAttributes.source); - } - - /** - * Sets the pointAttrbutes object to the specified object. - * @param pointAttributes object that specifies the desired texture - * attributes - */ - void setPointAttributes(PointAttributes pointAttributes) { - - synchronized(liveStateLock) { - if (source.isLive()) { - - if (this.pointAttributes != null) { - this.pointAttributes.clearLive(refCount); - this.pointAttributes.removeMirrorUsers(this); - } - if (pointAttributes != null) { - ((PointAttributesRetained)pointAttributes.retained).setLive(inBackgroundGroup, refCount); - ((PointAttributesRetained)pointAttributes.retained).copyMirrorUsers(this); - } - sendMessage(POINT, - (pointAttributes != null ? - ((PointAttributesRetained)pointAttributes.retained).mirror: - null), true); - } - - - if (pointAttributes == null) { - this.pointAttributes = null; - } else { - this.pointAttributes = (PointAttributesRetained)pointAttributes.retained; - } - } - } - - /** - * Retrieves the current pointAttributes object. - * @return the pointAttributes object - */ - PointAttributes getPointAttributes() { - return (pointAttributes == null? null : (PointAttributes)pointAttributes.source); - } - - /** - * Sets the texCoordGeneration object to the specified object. - * @param texCoordGeneration object that specifies the texture coordinate - * generation parameters - */ - void setTexCoordGeneration(TexCoordGeneration texGen) { - - synchronized(liveStateLock) { - if (source.isLive()) { - - if (this.texCoordGeneration != null) { - this.texCoordGeneration.clearLive(refCount); - this.texCoordGeneration.removeMirrorUsers(this); - } - - if (texGen != null) { - ((TexCoordGenerationRetained)texGen.retained).setLive(inBackgroundGroup, refCount); - ((TexCoordGenerationRetained)texGen.retained).copyMirrorUsers(this); - } - sendMessage(TEXCOORD_GEN, - (texGen != null ? - ((TexCoordGenerationRetained)texGen.retained).mirror : null), true); - } - - if (texGen == null) { - this.texCoordGeneration = null; - } else { - this.texCoordGeneration = (TexCoordGenerationRetained)texGen.retained; - } - } - } - - /** - * Retrieves the current texCoordGeneration object. - * @return the texCoordGeneration object - */ - TexCoordGeneration getTexCoordGeneration() { - return (texCoordGeneration == null ? null : - (TexCoordGeneration)texCoordGeneration.source); - } - - - /** - * Sets the texture unit state array to the specified array. - * @param textureUnitState array that specifies the texture unit state - */ - void setTextureUnitState(TextureUnitState[] stateArray) { - - int i; - - synchronized(liveStateLock) { - if (source.isLive()) { - - // remove the existing texture unit states from this appearance - if (this.texUnitState != null) { - for (i = 0; i < this.texUnitState.length; i++) { - if (this.texUnitState[i] != null) { - this.texUnitState[i].clearLive(refCount); - this.texUnitState[i].removeMirrorUsers(this); - } - } - } - - // add the specified texture unit states to this appearance - // also make a copy of the array of references to the units - if (stateArray != null && stateArray.length > 0) { - - Object [] args = new Object[2]; - - // -1 index means the entire array is to be set - args[0] = new Integer(-1); - - // make a copy of the array for the message, - TextureUnitStateRetained mirrorStateArray[] = - new TextureUnitStateRetained[stateArray.length]; - - args[1] = mirrorStateArray; - - for (i = 0; i < stateArray.length; i++) { - TextureUnitState tu = stateArray[i]; - if (tu != null) { - ((TextureUnitStateRetained)tu.retained).setLive( - inBackgroundGroup, refCount); - ((TextureUnitStateRetained)tu.retained).copyMirrorUsers( - this); - mirrorStateArray[i] = (TextureUnitStateRetained) - ((TextureUnitStateRetained)tu.retained).mirror; - } else { - mirrorStateArray[i] = null; - } - } - sendMessage(TEXTURE_UNIT_STATE, args, true); - - } else { - sendMessage(TEXTURE_UNIT_STATE, null, true); - } - } - - // assign the retained copy of the texture unit state to the - // appearance - if (stateArray == null) { - this.texUnitState = null; - } else { - - // make another copy of the array for the retained object - // itself if it doesn't have a copy or the array size is - // not the same - if ((this.texUnitState == null) || - (this.texUnitState.length != stateArray.length)) { - this.texUnitState = new TextureUnitStateRetained[ - stateArray.length]; - } - for (i = 0; i < stateArray.length; i++) { - if (stateArray[i] != null) { - this.texUnitState[i] = - (TextureUnitStateRetained)stateArray[i].retained; - } else { - this.texUnitState[i] = null; - } - } - } - } - } - - void setTextureUnitState(int index, TextureUnitState state) { - - synchronized(liveStateLock) { - if (source.isLive()) { - - // remove the existing texture unit states from this appearance - // Note: Let Java throw an exception if texUnitState is null - // or index is >= texUnitState.length. - if (this.texUnitState[index] != null) { - this.texUnitState[index].clearLive(refCount); - this.texUnitState[index].removeMirrorUsers(this); - } - - // add the specified texture unit states to this appearance - // also make a copy of the array of references to the units - Object args[] = new Object[2]; - args[0] = new Integer(index); - - if (state != null) { - ((TextureUnitStateRetained)state.retained).setLive( - inBackgroundGroup, refCount); - ((TextureUnitStateRetained)state.retained).copyMirrorUsers(this); - args[1] = ((TextureUnitStateRetained)state.retained).mirror; - sendMessage(TEXTURE_UNIT_STATE, args, true); - } else { - args[1] = null; - sendMessage(TEXTURE_UNIT_STATE, args, true); - } - } - - // assign the retained copy of the texture unit state to the - // appearance - if (state != null) { - this.texUnitState[index] = (TextureUnitStateRetained)state.retained; - } else { - this.texUnitState[index] = null; - } - } - } - - - - /** - * Retrieves the array of texture unit state objects from this - * Appearance object. A shallow copy of the array of references to - * the TextureUnitState objects is returned. - * - */ - TextureUnitState[] getTextureUnitState() { - if (texUnitState == null) { - return null; - } else { - TextureUnitState tus[] = - new TextureUnitState[texUnitState.length]; - for (int i = 0; i < texUnitState.length; i++) { - if (texUnitState[i] != null) { - tus[i] = (TextureUnitState) texUnitState[i].source; - } else { - tus[i] = null; - } - } - return tus; - } - } - - /** - * Retrieves the texture unit state object at the specified - * index within the texture unit state array. - */ - TextureUnitState getTextureUnitState(int index) { - - // let Java throw an exception if texUnitState == null or - // index is >= length - if (texUnitState[index] != null) - return (TextureUnitState)texUnitState[index].source; - else - return null; - } - - - /** - * Retrieves the length of the texture unit state array from - * this appearance object. The length of this array specifies the - * maximum number of texture units that will be used by this - * appearance object. If the array is null, a count of 0 is - * returned. - */ - - int getTextureUnitCount() { - if (texUnitState == null) - return 0; - else - return texUnitState.length; - } - - - @Override - synchronized void createMirrorObject() { - if (mirror == null) { - // we can't check isStatic() since it sub-NodeComponent - // create a new one, we should create a - // new AppearanceRetained() even though isStatic() = true. - // For simplicity, always create a retained side. - mirror = new AppearanceRetained(); - } - initMirrorObject(); - } - - /** - * This routine updates the mirror appearance for this appearance. - * It also calls the update method for each node component if it - * is not null. - */ - @Override - synchronized void initMirrorObject() { - - AppearanceRetained mirrorApp = (AppearanceRetained)mirror; - - mirrorApp.source = source; - mirrorApp.sgApp = this; - - // Fix for Issue 33: copy the changedFrequent mask to mirror - mirrorApp.changedFrequent = changedFrequent; - - if (material != null) { - mirrorApp.material = (MaterialRetained)material.mirror; - } else { - mirrorApp.material = null; - } - - if (texture != null) { - mirrorApp.texture = (TextureRetained)texture.mirror; - } else { - mirrorApp.texture = null; - } - if (texCoordGeneration != null) { - mirrorApp.texCoordGeneration = (TexCoordGenerationRetained)texCoordGeneration.mirror; - } else { - mirrorApp.texCoordGeneration = null; - } - - if (textureAttributes != null) { - mirrorApp.textureAttributes = (TextureAttributesRetained)textureAttributes.mirror; - } else { - mirrorApp.textureAttributes = null; - } - - // TextureUnitState supercedes the single texture interface - if (texUnitState != null && texUnitState.length > 0) { - mirrorApp.texUnitState = - new TextureUnitStateRetained[texUnitState.length]; - for (int i = 0; i < texUnitState.length; i++) { - if (texUnitState[i] != null) { - mirrorApp.texUnitState[i] = - (TextureUnitStateRetained)texUnitState[i].mirror; - } - } - } else if (mirrorApp.texture != null || - mirrorApp.textureAttributes != null || - mirrorApp.texCoordGeneration != null) { - - mirrorApp.texUnitState = new TextureUnitStateRetained[1]; - mirrorApp.texUnitState[0] = new TextureUnitStateRetained(); - mirrorApp.texUnitState[0].set( - mirrorApp.texture, - mirrorApp.textureAttributes, - mirrorApp.texCoordGeneration); - } - - if (coloringAttributes != null) { - mirrorApp.coloringAttributes = (ColoringAttributesRetained)coloringAttributes.mirror; - } else { - mirrorApp.coloringAttributes = null; - } - if (transparencyAttributes != null) { - mirrorApp.transparencyAttributes = (TransparencyAttributesRetained)transparencyAttributes.mirror; - } else { - mirrorApp.transparencyAttributes = null; - } - - if (renderingAttributes != null) { - mirrorApp.renderingAttributes = (RenderingAttributesRetained)renderingAttributes.mirror; - } else { - mirrorApp.renderingAttributes = null; - } - - if (polygonAttributes != null) { - mirrorApp.polygonAttributes = (PolygonAttributesRetained)polygonAttributes.mirror; - } else { - mirrorApp.polygonAttributes = null; - } - - if (lineAttributes != null) { - mirrorApp.lineAttributes = (LineAttributesRetained)lineAttributes.mirror; - } else { - mirrorApp.lineAttributes = null; - } - - if (pointAttributes != null) { - mirrorApp.pointAttributes = (PointAttributesRetained)pointAttributes.mirror; - } else { - mirrorApp.pointAttributes = null; - } - } - - /** - * Update the "component" field of the mirror object with the - * given "value" - */ - @Override - synchronized void updateMirrorObject(int component, Object value) { - AppearanceRetained mirrorApp = (AppearanceRetained)mirror; - if ((component & MATERIAL) != 0) { - mirrorApp.material = (MaterialRetained)value; - } - else if ((component & TEXTURE) != 0) { - // Issue 435: set mirror texture - mirrorApp.texture = (TextureRetained)value; - if (mirrorApp.texUnitState == null) { - mirrorApp.texUnitState = new TextureUnitStateRetained[1]; - mirrorApp.texUnitState[0] = new TextureUnitStateRetained(); - } - mirrorApp.texUnitState[0].texture = (TextureRetained)value; - } - else if ((component & TEXCOORD_GEN) != 0) { - if (mirrorApp.texUnitState == null) { - mirrorApp.texUnitState = new TextureUnitStateRetained[1]; - mirrorApp.texUnitState[0] = new TextureUnitStateRetained(); - } - mirrorApp.texUnitState[0].texGen = (TexCoordGenerationRetained)value; - } - else if ((component & TEXTURE_ATTR) != 0) { - if (mirrorApp.texUnitState == null) { - mirrorApp.texUnitState = new TextureUnitStateRetained[1]; - mirrorApp.texUnitState[0] = new TextureUnitStateRetained(); - } - mirrorApp.texUnitState[0].texAttrs = (TextureAttributesRetained)value; - } - else if ((component & TEXTURE_UNIT_STATE) != 0) { - Object [] args = (Object [])value; - - if (args == null) { - mirrorApp.texUnitState = null; - } else { - int index = ((Integer)args[0]).intValue(); - if (index == -1) { - mirrorApp.texUnitState = - (TextureUnitStateRetained [])args[1]; - } else { - mirrorApp.texUnitState[index] = - (TextureUnitStateRetained)args[1]; - } - } - } - else if ((component & COLOR) != 0) { - mirrorApp.coloringAttributes = (ColoringAttributesRetained)value; - } - else if ((component & TRANSPARENCY) != 0) { - mirrorApp.transparencyAttributes = (TransparencyAttributesRetained)value; - } - else if ((component & RENDERING) != 0) { - mirrorApp.renderingAttributes = (RenderingAttributesRetained)value; - } - else if ((component & POLYGON) != 0) { - mirrorApp.polygonAttributes = (PolygonAttributesRetained)value; - } - else if ((component & LINE) != 0) { - mirrorApp.lineAttributes = (LineAttributesRetained)value; - } - else if ((component & POINT) != 0) { - mirrorApp.pointAttributes = (PointAttributesRetained)value; - } - - } - - @Override - void setLive(boolean backgroundGroup, int refCount) { - // System.err.println("AppearceRetained.setLive()"); - doSetLive(backgroundGroup, refCount); - markAsLive(); - } - - /** - * This method calls the setLive method of all appearance bundle - * objects. - */ - @Override - void doSetLive(boolean backgroundGroup, int refCount) { - // System.err.println("AppearceRetained.doSetLive()"); - - if (material != null) { - - material.setLive(backgroundGroup, refCount); - } - - if (texture != null) { - - texture.setLive(backgroundGroup, refCount); - } - - if (texCoordGeneration != null) { - - texCoordGeneration.setLive(backgroundGroup, refCount); - } - - if (textureAttributes != null) { - - textureAttributes.setLive(backgroundGroup, refCount); - } - - if (texUnitState != null) { - for (int i = 0; i < texUnitState.length; i++) { - if (texUnitState[i] != null) - texUnitState[i].setLive(backgroundGroup, refCount); - } - } - - - if (coloringAttributes != null) { - coloringAttributes.setLive(backgroundGroup, refCount); - } - - if (transparencyAttributes != null) { - transparencyAttributes.setLive(backgroundGroup, refCount); - } - - if (renderingAttributes != null) { - renderingAttributes.setLive(backgroundGroup, refCount); - } - - if (polygonAttributes != null) { - polygonAttributes.setLive(backgroundGroup, refCount); - } - - if (lineAttributes != null) { - lineAttributes.setLive(backgroundGroup, refCount); - } - - if (pointAttributes != null) { - pointAttributes.setLive(backgroundGroup, refCount); - } - - - // Increment the reference count and initialize the appearance - // mirror object - super.doSetLive(backgroundGroup, refCount); - } - - /** - * This method calls the clearLive method of all appearance bundle - * objects. - */ - @Override - void clearLive(int refCount) { - super.clearLive(refCount); - - if (texture != null) { - texture.clearLive(refCount); - } - - if (texCoordGeneration != null) { - texCoordGeneration.clearLive(refCount); - } - - if (textureAttributes != null) { - textureAttributes.clearLive(refCount); - } - - if (texUnitState != null) { - for (int i = 0; i < texUnitState.length; i++) { - if (texUnitState[i] != null) - texUnitState[i].clearLive(refCount); - } - } - - if (coloringAttributes != null) { - coloringAttributes.clearLive(refCount); - } - - if (transparencyAttributes != null) { - transparencyAttributes.clearLive(refCount); - } - - if (renderingAttributes != null) { - renderingAttributes.clearLive(refCount); - } - - if (polygonAttributes != null) { - polygonAttributes.clearLive(refCount); - } - - if (lineAttributes != null) { - lineAttributes.clearLive(refCount); - } - - if (pointAttributes != null) { - pointAttributes.clearLive(refCount); - } - - if (material != null) { - material.clearLive(refCount); - } - } - - - @Override - boolean isStatic() { - boolean flag; - - flag = (source.capabilityBitsEmpty() && - ((texture == null) || - texture.source.capabilityBitsEmpty()) && - ((texCoordGeneration == null) || - texCoordGeneration.source.capabilityBitsEmpty()) && - ((textureAttributes == null) || - textureAttributes.source.capabilityBitsEmpty()) && - ((coloringAttributes == null) || - coloringAttributes.source.capabilityBitsEmpty()) && - ((transparencyAttributes == null) || - transparencyAttributes.source.capabilityBitsEmpty()) && - ((renderingAttributes == null) || - renderingAttributes.source.capabilityBitsEmpty()) && - ((polygonAttributes == null) || - polygonAttributes.source.capabilityBitsEmpty()) && - ((lineAttributes == null) || - lineAttributes.source.capabilityBitsEmpty()) && - ((pointAttributes == null) || - pointAttributes.source.capabilityBitsEmpty()) && - ((material == null) || - material.source.capabilityBitsEmpty())); - - if (!flag) - return flag; - - if (texUnitState != null) { - for (int i = 0; i < texUnitState.length && flag; i++) { - if (texUnitState[i] != null) { - flag = flag && texUnitState[i].isStatic(); - } - } - } - - return flag; - } - - // Issue 209 - enable this method (was previously commented out) - // Simply pass along to the NodeComponents - @Override - void compile(CompileState compState) { - setCompiled(); - - if (texture != null) { - texture.compile(compState); - } - - if (texCoordGeneration != null) { - texCoordGeneration.compile(compState); - } - - if (textureAttributes != null) { - textureAttributes.compile(compState); - } - - if (texUnitState != null) { - for (int i = 0; i < texUnitState.length; i++) { - if (texUnitState[i] != null) - texUnitState[i].compile(compState); - } - } - - if (coloringAttributes != null) { - coloringAttributes.compile(compState); - } - - if (transparencyAttributes != null) { - transparencyAttributes.compile(compState); - } - - if (renderingAttributes != null) { - renderingAttributes.compile(compState); - } - - if (polygonAttributes != null) { - polygonAttributes.compile(compState); - } - - if (lineAttributes != null) { - lineAttributes.compile(compState); - } - - if (pointAttributes != null) { - pointAttributes.compile(compState); - } - - if (material != null) { - material.compile(compState); - } - } - - /** - * Returns the hashcode for this object. - * hashcode should be constant for object but same for two objects - * if .equals() is true. For an appearance (where .equals() is going - * to use the values in the appearance), the only way to have a - * constant value is for all appearances to have the same hashcode, so - * we use the hashcode of the class obj. - * - * Since hashCode is only used by AppearanceMap (at present) we may be - * able to improve efficency by calcing a hashCode from the values. - */ - @Override - public int hashCode() { - return getClass().hashCode(); - } - - @Override - public boolean equals(Object obj) { - return ((obj instanceof AppearanceRetained) && - equals((AppearanceRetained) obj)); - } - - boolean equals(AppearanceRetained app) { - boolean flag; - - flag = (app == this) || - ((app != null) && - (((material == app.material) || - ((material != null) && material.equivalent(app.material))) && - ((texture == app.texture) || - ((texture != null) && texture.equals(app.texture))) && - ((renderingAttributes == app.renderingAttributes) || - ((renderingAttributes != null) && - renderingAttributes.equivalent( - app.renderingAttributes))) && - ((polygonAttributes == app.polygonAttributes) || - ((polygonAttributes != null) && - polygonAttributes.equivalent(app.polygonAttributes))) && - ((texCoordGeneration == app.texCoordGeneration) || - ((texCoordGeneration != null) && - texCoordGeneration.equivalent(app.texCoordGeneration))) && - ((textureAttributes == app.textureAttributes) || - ((textureAttributes != null) && - textureAttributes.equivalent(app.textureAttributes))) && - ((coloringAttributes == app.coloringAttributes) || - ((coloringAttributes != null) && - coloringAttributes.equivalent(app.coloringAttributes))) && - ((transparencyAttributes == app.transparencyAttributes) || - ((transparencyAttributes != null) && - transparencyAttributes.equivalent( - app.transparencyAttributes))) && - ((lineAttributes == app.lineAttributes) || - ((lineAttributes != null) && - lineAttributes.equivalent(app.lineAttributes))) && - ((pointAttributes == app.pointAttributes) || - ((pointAttributes != null) && - pointAttributes.equivalent(app.pointAttributes))))); - - if (!flag) - return (flag); - - if (texUnitState == app.texUnitState) - return (flag); - - if (texUnitState == null || app.texUnitState == null || - texUnitState.length != app.texUnitState.length) - return (false); - - for (int i = 0; i < texUnitState.length; i++) { - if (texUnitState[i] == app.texUnitState[i]) - continue; - - if (texUnitState[i] == null || app.texUnitState[i] == null || - !texUnitState[i].equals(app.texUnitState[i])) - return (false); - } - return (true); - } - - - - - @Override - synchronized void addAMirrorUser(Shape3DRetained shape) { - - super.addAMirrorUser(shape); - if (material != null) - material.addAMirrorUser(shape); - - if (texture != null) - texture.addAMirrorUser(shape); - if (texCoordGeneration != null) - texCoordGeneration.addAMirrorUser(shape); - if (textureAttributes != null) - textureAttributes.addAMirrorUser(shape); - - if (texUnitState != null) { - for (int i = 0; i < texUnitState.length; i++) { - if (texUnitState[i] != null) - texUnitState[i].addAMirrorUser(shape); - } - } - - if (coloringAttributes != null) - coloringAttributes.addAMirrorUser(shape); - if (transparencyAttributes != null) - transparencyAttributes.addAMirrorUser(shape); - if (renderingAttributes != null) - renderingAttributes.addAMirrorUser(shape); - if (polygonAttributes != null) - polygonAttributes.addAMirrorUser(shape); - if (lineAttributes != null) - lineAttributes.addAMirrorUser(shape); - if (pointAttributes != null) - pointAttributes.addAMirrorUser(shape); - } - - @Override - synchronized void removeAMirrorUser(Shape3DRetained shape) { - super.removeAMirrorUser(shape); - if (material != null) - material.removeAMirrorUser(shape); - if (texture != null) - texture.removeAMirrorUser(shape); - if (texCoordGeneration != null) - texCoordGeneration.removeAMirrorUser(shape); - if (textureAttributes != null) - textureAttributes.removeAMirrorUser(shape); - - if (texUnitState != null) { - for (int i = 0; i < texUnitState.length; i++) { - if (texUnitState[i] != null) - texUnitState[i].removeAMirrorUser(shape); - } - } - - if (coloringAttributes != null) - coloringAttributes.removeAMirrorUser(shape); - if (transparencyAttributes != null) - transparencyAttributes.removeAMirrorUser(shape); - if (renderingAttributes != null) - renderingAttributes.removeAMirrorUser(shape); - if (polygonAttributes != null) - polygonAttributes.removeAMirrorUser(shape); - if (lineAttributes != null) - lineAttributes.removeAMirrorUser(shape); - if (pointAttributes != null) - pointAttributes.removeAMirrorUser(shape); - } - - // 3rd argument used only when Rendering Attr comp changes - final void sendMessage(int attrMask, Object attr, boolean visible) { - ArrayList<VirtualUniverse> univList = new ArrayList<VirtualUniverse>(); - ArrayList<ArrayList<GeometryAtom>> gaList = Shape3DRetained.getGeomAtomsList(mirror.users, univList); - // Send to rendering attribute structure, regardless of - // whether there are users or not (alternate appearance case ..) - J3dMessage createMessage = new J3dMessage(); - createMessage.threads = J3dThread.UPDATE_RENDERING_ATTRIBUTES; - createMessage.type = J3dMessage.APPEARANCE_CHANGED; - createMessage.universe = null; - createMessage.args[0] = this; - createMessage.args[1]= new Integer(attrMask); - createMessage.args[2] = attr; - createMessage.args[3] = new Integer(changedFrequent); - - VirtualUniverse.mc.processMessage(createMessage); - - - // System.err.println("univList.size is " + univList.size()); - for(int i=0; i<univList.size(); i++) { - createMessage = new J3dMessage(); - createMessage.threads = J3dThread.UPDATE_RENDER; - createMessage.type = J3dMessage.APPEARANCE_CHANGED; - - createMessage.universe = univList.get(i); - createMessage.args[0] = this; - createMessage.args[1]= new Integer(attrMask); - createMessage.args[2] = attr; - - ArrayList<GeometryAtom> gL = gaList.get(i); - GeometryAtom[] gaArr = new GeometryAtom[gL.size()]; - gL.toArray(gaArr); - createMessage.args[3] = gaArr; - // Send the value itself, since Geometry Structure cannot rely on the - // mirror (which may be updated lazily) - if (attrMask == RENDERING) { - if (attr != null) { - createMessage.args[4] = visible?Boolean.TRUE:Boolean.FALSE; - } - else { - createMessage.args[4] = Boolean.TRUE; - } - } - VirtualUniverse.mc.processMessage(createMessage); - } - } - - - - final void sendRenderingAttributesChangedMessage(boolean visible) { - - ArrayList<VirtualUniverse> univList = new ArrayList<VirtualUniverse>(); - ArrayList<ArrayList<GeometryAtom>> gaList = Shape3DRetained.getGeomAtomsList(mirror.users, univList); - - // System.err.println("univList.size is " + univList.size()); - for(int i=0; i<univList.size(); i++) { - J3dMessage createMessage = new J3dMessage(); - createMessage.threads = J3dThread.UPDATE_GEOMETRY; - createMessage.type = J3dMessage.RENDERINGATTRIBUTES_CHANGED; - - createMessage.universe = univList.get(i); - createMessage.args[0] = this; - createMessage.args[1] = null; // Sync with RenderingAttrRetained sendMessage - createMessage.args[2]= visible?Boolean.TRUE:Boolean.FALSE; - - ArrayList<GeometryAtom> gL = gaList.get(i); - GeometryAtom[] gaArr = new GeometryAtom[gL.size()]; - gL.toArray(gaArr); - createMessage.args[3] = gaArr; - VirtualUniverse.mc.processMessage(createMessage); - } - } - - boolean isOpaque(int geoType) { - if (TransparencyAttributesRetained.useAlpha(transparencyAttributes)) - return false; - - switch (geoType) { - case GeometryRetained.GEO_TYPE_POINT_SET: - case GeometryRetained.GEO_TYPE_INDEXED_POINT_SET: - if ((pointAttributes != null) && - pointAttributes.pointAntialiasing) { - return (false); - } - break; - case GeometryRetained.GEO_TYPE_LINE_SET: - case GeometryRetained.GEO_TYPE_LINE_STRIP_SET: - case GeometryRetained.GEO_TYPE_INDEXED_LINE_SET: - case GeometryRetained.GEO_TYPE_INDEXED_LINE_STRIP_SET: - if ((lineAttributes != null) && - lineAttributes.lineAntialiasing) { - return (false); - } - break; - case GeometryRetained.GEO_TYPE_RASTER: - case GeometryRetained.GEO_TYPE_COMPRESSED: - break; - default: - if (polygonAttributes != null) { - if((polygonAttributes.polygonMode == - PolygonAttributes.POLYGON_POINT) && - (pointAttributes != null) && - pointAttributes.pointAntialiasing) { - return (false); - } else if ((polygonAttributes.polygonMode == - PolygonAttributes.POLYGON_LINE) && - (lineAttributes != null) && - lineAttributes.lineAntialiasing) { - return (false); - } - } - break; - } - - return(true); - } - - @Override - void handleFrequencyChange(int bit) { - int mask = 0; - if (bit == Appearance.ALLOW_COLORING_ATTRIBUTES_WRITE) - mask = COLOR; - else if(bit == Appearance.ALLOW_TRANSPARENCY_ATTRIBUTES_WRITE) - mask = TRANSPARENCY; - else if(bit == Appearance.ALLOW_RENDERING_ATTRIBUTES_WRITE) - mask = RENDERING; - else if (bit == Appearance.ALLOW_POLYGON_ATTRIBUTES_WRITE) - mask = POLYGON; - else if (bit == Appearance.ALLOW_LINE_ATTRIBUTES_WRITE) - mask = LINE; - else if (bit == Appearance.ALLOW_POINT_ATTRIBUTES_WRITE) - mask = POINT; - else if (bit == Appearance.ALLOW_MATERIAL_WRITE) - mask = MATERIAL; - else if (bit == Appearance.ALLOW_TEXTURE_WRITE) - mask = TEXTURE; - else if (bit == Appearance.ALLOW_TEXTURE_ATTRIBUTES_WRITE) - mask = TEXTURE_ATTR; - else if (bit == Appearance.ALLOW_TEXGEN_WRITE) - mask = TEXCOORD_GEN; - else if (bit == Appearance.ALLOW_TEXTURE_UNIT_STATE_WRITE) - mask = TEXTURE_UNIT_STATE; - - if (mask != 0) - setFrequencyChangeMask(bit, mask); - } -} - - |