diff options
author | Harvey Harrison <[email protected]> | 2015-04-19 21:02:06 -0700 |
---|---|---|
committer | Harvey Harrison <[email protected]> | 2015-04-19 21:02:06 -0700 |
commit | 7a2e20caac9db6f789a7b3fab344b9758af45335 (patch) | |
tree | b5236ff2570178de356eab569225108948eb4d30 /src/javax/media/j3d/RenderingAttributesStructure.java | |
parent | f76ce302c4bb2a9f03bbee571ec5d05c29633023 (diff) |
j3dcore: flatten the directory structure a bit
Signed-off-by: Harvey Harrison <[email protected]>
Diffstat (limited to 'src/javax/media/j3d/RenderingAttributesStructure.java')
-rw-r--r-- | src/javax/media/j3d/RenderingAttributesStructure.java | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/src/javax/media/j3d/RenderingAttributesStructure.java b/src/javax/media/j3d/RenderingAttributesStructure.java new file mode 100644 index 0000000..67ba1ef --- /dev/null +++ b/src/javax/media/j3d/RenderingAttributesStructure.java @@ -0,0 +1,248 @@ +/* + * Copyright 1998-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; +import java.util.Arrays; + +/** + * A rendering attributes structure is an object that handles + * NodeComponent object updates. + */ + +class RenderingAttributesStructure extends J3dStructure implements ObjectUpdate { + // List of textures whose resourceCreation mask should be updated + ArrayList<J3dMessage> objList = new ArrayList<J3dMessage>(); + + RenderingAttributesStructure() { + super(null, J3dThread.UPDATE_RENDERING_ATTRIBUTES); + } + + @Override + void processMessages(long referenceTime) { + J3dMessage m; + boolean addMirrorObj = false; + + J3dMessage messages[] = getMessages(referenceTime); + int nMsg = getNumMessage(); + + if (nMsg <= 0) { + return; + } + + for (int i=0; i < nMsg; i++) { + m = messages[i]; + switch (m.type) { + // Appearance is always updated immediately, since rBin needs + // the most up-to-date values for restructuring + case J3dMessage.APPEARANCE_CHANGED: + case J3dMessage.SHADER_APPEARANCE_CHANGED: + case J3dMessage.TEXTURE_UNIT_STATE_CHANGED: + { + // System.err.println("1 RAS : J3dMessage type : " + m.type); + int component = ((Integer)m.args[1]).intValue(); + NodeComponentRetained nc = (NodeComponentRetained)m.args[0]; + nc.mirror.changedFrequent = ((Integer)m.args[3]).intValue(); + updateNodeComponent((Object[])m.args); + if (nc.mirror.changedFrequent != 0) { + objList.add(m); + addMirrorObj = true; + nc.mirror.compChanged |= component; + } + else { + m.decRefcount(); + } + } + break; + case J3dMessage.COLORINGATTRIBUTES_CHANGED: + case J3dMessage.LINEATTRIBUTES_CHANGED: + case J3dMessage.POINTATTRIBUTES_CHANGED: + case J3dMessage.POLYGONATTRIBUTES_CHANGED: + case J3dMessage.RENDERINGATTRIBUTES_CHANGED: + case J3dMessage.TRANSPARENCYATTRIBUTES_CHANGED: + case J3dMessage.MATERIAL_CHANGED: + case J3dMessage.TEXCOORDGENERATION_CHANGED: + case J3dMessage.SHADER_ATTRIBUTE_CHANGED: + case J3dMessage.SHADER_ATTRIBUTE_SET_CHANGED: + { + // System.err.println("2 RAS : J3dMessage type : " + m.type); + + NodeComponentRetained nc = (NodeComponentRetained)m.args[0]; + nc.mirror.changedFrequent = ((Integer)m.args[3]).intValue(); + if (nc.mirror.changedFrequent != 0) { + objList.add(m); + addMirrorObj = true; + nc.mirror.compChanged = 1; + } + else { + updateNodeComponent((Object[])m.args); + m.decRefcount(); + } + } + break; + case J3dMessage.IMAGE_COMPONENT_CHANGED: + { + NodeComponentRetained nc = (NodeComponentRetained)m.args[0]; + int changes = ((Integer)m.args[3]).intValue(); + if(nc.mirror != null) + nc.mirror.changedFrequent = changes; + if (changes != 0) { + objList.add(m); + addMirrorObj = true; + } + else { + updateNodeComponent((Object[])m.args); + m.decRefcount(); + } + } + break; + case J3dMessage.TEXTUREATTRIBUTES_CHANGED: + { + + NodeComponentRetained nc = (NodeComponentRetained)m.args[0]; + nc.mirror.changedFrequent = ((Integer)m.args[4]).intValue(); + + if (nc.mirror.changedFrequent != 0) { + objList.add(m); + addMirrorObj = true; + nc.mirror.compChanged = 1; + } + else { + updateTextureAttributes((Object[])m.args); + m.decRefcount(); + } + } + break; + case J3dMessage.TEXTURE_CHANGED: + { + NodeComponentRetained nc = (NodeComponentRetained)m.args[0]; + nc.mirror.changedFrequent = ((Integer)m.args[3]).intValue(); + + objList.add(m); + nc.mirror.compChanged = 1; + addMirrorObj = true; + } + break; + case J3dMessage.GEOMETRY_CHANGED: + GeometryRetained geo = (GeometryRetained) m.args[1]; + int val; + if (geo instanceof IndexedGeometryArrayRetained) { + objList.add(m); + addMirrorObj = true; + if (m.args[2] == null) { + val = ((Integer)m.args[3]).intValue(); + geo.cachedChangedFrequent = val; + } + } + else { + val = ((Integer)m.args[3]).intValue(); + geo.cachedChangedFrequent = val; + m.decRefcount(); + } + break; + case J3dMessage.MORPH_CHANGED: + objList.add(m); + addMirrorObj = true; + break; + default: + m.decRefcount(); + } + } + if (addMirrorObj) { + VirtualUniverse.mc.addMirrorObject(this); + } + + // clear array to prevent memory leaks + Arrays.fill(messages, 0, nMsg, null); + } + + @Override + public void updateObject() { + + int size = objList.size(); + for (int i = 0; i < size; i++) { + J3dMessage m = objList.get(i); + // Message Only sent to RenderingAttributesStructure + // when the geometry type is indexed + if (m.type == J3dMessage.GEOMETRY_CHANGED) { + GeometryArrayRetained geo = (GeometryArrayRetained)m.args[1]; + if (m.args[2] == null) { + geo.updateMirrorGeometry(); + } + else { + geo.initMirrorGeometry(); + } + } + else if (m.type == J3dMessage.MORPH_CHANGED) { + MorphRetained morph = (MorphRetained) m.args[0]; + GeometryArrayRetained geo = (GeometryArrayRetained)morph.morphedGeometryArray.retained; + geo.updateMirrorGeometry(); + } + else if (m.type == J3dMessage.TEXTUREATTRIBUTES_CHANGED) { + NodeComponentRetained nc = (NodeComponentRetained)m.args[0]; + nc.mirror.compChanged = 0; + updateTextureAttributes((Object[])m.args); + } + else if (m.type == J3dMessage.APPEARANCE_CHANGED || + m.type == J3dMessage.SHADER_APPEARANCE_CHANGED || + m.type == J3dMessage.TEXTURE_UNIT_STATE_CHANGED){ + NodeComponentRetained nc = (NodeComponentRetained)m.args[0]; + nc.mirror.compChanged = 0; + } + else { + NodeComponentRetained nc = (NodeComponentRetained)m.args[0]; + if (nc.mirror != null) + nc.mirror.compChanged = 0; + updateNodeComponent(m.args); + } + m.decRefcount(); + } + objList.clear(); + } + + + private void updateNodeComponent(Object[] args) { + // System.err.println("RAS : updateNodeComponent : " + this); + NodeComponentRetained n = (NodeComponentRetained)args[0]; + n.updateMirrorObject(((Integer)args[1]).intValue(), args[2]); + } + + private void updateTextureAttributes(Object[] args) { + TextureAttributesRetained n = (TextureAttributesRetained)args[0]; + n.updateMirrorObject(((Integer)args[1]).intValue(), args[2], args[3]); + } + + @Override + void removeNodes(J3dMessage m) {} + + @Override + void cleanup() {} + + +} + + |