001: /*
002: * $RCSfile: SceneGraphObjectRetained.java,v $
003: *
004: * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
006: *
007: * This code is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU General Public License version 2 only, as
009: * published by the Free Software Foundation. Sun designates this
010: * particular file as subject to the "Classpath" exception as provided
011: * by Sun in the LICENSE file that accompanied this code.
012: *
013: * This code is distributed in the hope that it will be useful, but WITHOUT
014: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
015: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
016: * version 2 for more details (a copy is included in the LICENSE file that
017: * accompanied this code).
018: *
019: * You should have received a copy of the GNU General Public License version
020: * 2 along with this work; if not, write to the Free Software Foundation,
021: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
022: *
023: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
024: * CA 95054 USA or visit www.sun.com if you need additional information or
025: * have any questions.
026: *
027: * $Revision: 1.6 $
028: * $Date: 2008/02/28 20:17:29 $
029: * $State: Exp $
030: */
031:
032: package javax.media.j3d;
033:
034: import java.util.Vector;
035: import java.util.Hashtable;
036:
037: /**
038: * SceneGraphObjectRetained is a superclass, which has things that
039: * are common to all retained scene graph component objects.
040: */
041: abstract class SceneGraphObjectRetained extends IndexedObject implements
042: Cloneable {
043:
044: // The object which created this retained mode object
045: SceneGraphObject source;
046:
047: // This boolean is true when the object is in a Background BranchGroup
048: boolean inBackgroundGroup = false;
049:
050: // This boolean is true when the object is in the update list
051: boolean onUpdateList = false;
052:
053: // A flag to indicate if the node is in setLive, note that
054: // since the live is set to true only at the end, this flag
055: // is need for scoping to mark the nodes that are inSetLive
056:
057: boolean inSetLive = false;
058:
059: // A flag used in compile to indicate if this node needs to go
060: // through the second pass
061:
062: final static int DONT_MERGE = 0;
063: final static int MERGE = 1;
064: final static int MERGE_DONE = 2;
065:
066: int mergeFlag = 0;
067:
068: /**
069: * Caches the source object that created this retained mode object.
070: * @param source the object which created this retained mode object.
071: */
072: void setSource(SceneGraphObject source) {
073: this .source = source;
074: }
075:
076: /**
077: * Returns the cached source object that created this retained mode
078: * object.
079: * @return the object which created this retained mode object.
080: */
081: SceneGraphObject getSource() {
082: return this .source;
083: }
084:
085: void markAsLive() {
086: this .source.setLive();
087: inSetLive = false;
088: }
089:
090: void setLive(boolean inBackgroundGroup) {
091: doSetLive(inBackgroundGroup);
092: markAsLive();
093: }
094:
095: boolean isInSetLive() {
096: return inSetLive;
097: }
098:
099: /**
100: * Makes the internal node live.
101: */
102: void doSetLive(boolean inBackgroundGroup) {
103: inSetLive = true;
104: this .inBackgroundGroup = inBackgroundGroup;
105: }
106:
107: void setLive(SetLiveState s) {
108: doSetLive(s);
109: markAsLive();
110: }
111:
112: /**
113: * Makes the internal node live.
114: */
115: void doSetLive(SetLiveState s) {
116: inSetLive = true;
117: inBackgroundGroup = s.inBackgroundGroup;
118: }
119:
120: /**
121: * Makes the internal node not live
122: */
123: void clearLive(VirtualUniverse univ, int index,
124: boolean sharedGroup, HashKey[] keys) {
125: inBackgroundGroup = false;
126: this .source.clearLive();
127: }
128:
129: /**
130: * Makes the internal node not live
131: */
132: void clearLive() {
133: inBackgroundGroup = false;
134: this .source.clearLive();
135: }
136:
137: /**
138: * This marks this object as compiled.
139: */
140: void setCompiled() {
141: this .source.setCompiled();
142: }
143:
144: /**
145: * This is the default compile() method, which just marks the sgo as
146: * compiled.
147: */
148: void compile(CompileState compState) {
149: setCompiled();
150: }
151:
152: void merge(CompileState compState) {
153: }
154:
155: void mergeTransform(TransformGroupRetained xform) {
156: }
157:
158: void traverse(boolean sameLevel, int level) {
159:
160: System.err.println();
161: for (int i = 0; i < level; i++) {
162: System.err.print(".");
163: }
164: System.err.print(this );
165: }
166:
167: /**
168: * true if component can't be read or written after compile or setlive()
169: */
170: boolean isStatic() {
171: return source.capabilityBitsEmpty();
172: }
173:
174: protected Object clone() {
175: try {
176: return super .clone();
177: } catch (CloneNotSupportedException e) {
178: return null;
179: }
180: }
181:
182: void handleFrequencyChange(int bit) {
183: }
184:
185: VirtualUniverse getVirtualUniverse() {
186: return null;
187: }
188:
189: }
|