
javax.media.j3d.SetLiveState Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of j3dcore Show documentation
Show all versions of j3dcore Show documentation
3D Graphics API for the Java Platform
/*
* 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;
/**
* SetLiveState is used to encapsulate all state needed when a branch
* group is added to the scene graph
*/
class SetLiveState extends Object {
// The VirtualUniverse for this branch group
VirtualUniverse universe = null;
// The Locale for this Branch Graph
Locale locale = null;
// The transforms used to update state
Transform3D[][] currentTransforms = new Transform3D[1][];
int[][] currentTransformsIndex = new int[1][];
// The keys used when dealing with SharedGroups
HashKey[] keys = null;
// flags for detecting what we are under
boolean inSharedGroup = false;
boolean inBackgroundGroup = false;
boolean inViewSpecificGroup = false;
/**
* The list of nodes added/removed during setLive/clearLive
*/
ArrayList nodeList = new ArrayList();
/**
* List of nodes that are viewScoped. Note that all nodes
* except Shape3D nodes can be in viewScopedNodeList, shape3D
* nodes will always be in the nodeList regardless of scoped
* or not. Also, only renderbin and renderingEnv structure is
* interested in viewScopedNodeList
*/
ArrayList viewScopedNodeList = null;
/**
* Parallel list to viewScopedNodeList containing a list of views
* that the viewScopedNode is scoped to
*/
ArrayList> scopedNodesViewList = null;
// Threads to notify after setLive/clearLive
int notifyThreads = 0;
// The current list of leaf nodes for transform targets
Targets[] transformTargets = null;
// List of transform level, one per shared path
int transformLevels[] = new int[]{-1};
// List of scoped lights
ArrayList> lights = null;
// List of scoped fogs
ArrayList> fogs = null;
// List of scoped modelClips
ArrayList> modelClips = null;
// List of scoped alt app
ArrayList> altAppearances = null;
// List of viewes scoped to this Group, for all subclasses
// of group, except ViewSpecificGroup its a pointer to closest
// ViewSpecificGroup parent
// viewList for this node, if inSharedGroup is
// false then only viewList(0) is valid
ArrayList> viewLists = null;
ArrayList changedViewGroup = null;
ArrayList> changedViewList = null;
int[] keyList = null;
// The current bitmask of types in transformTragets
//int transformTargetThreads = 0;
ArrayList orderedPaths = null;
ArrayList ogList = new ArrayList(5);
ArrayList ogChildIdList = new ArrayList(5);
ArrayList ogOrderedIdList = new ArrayList(5);
// ogCIOList contains a list of OG with affected child index order.
ArrayList ogCIOList = new ArrayList(5);
// ogCIOTableList contains a list of affected child index order.
ArrayList ogCIOTableList = new ArrayList(5);
/**
* List of BranchGroup from this node to the root of tree This is used by
* BranchGroupRetained to construct BranchGroup lists for picking.
*
* @see NodeRetained.branchGroupPaths
*/
ArrayList branchGroupPaths = null;
ArrayList parentBranchGroupPaths = null;
/**
* List of Pickable flags, one for each share path.
* This flag is true when all the NodeRetained.pickable is true
* along the path except current node.
*/
boolean pickable[] = new boolean[]{true};
/**
* List of collidable flags, one for each share path.
* This flag is true when all the NodeRetained.pickable is true
* along the path except current node.
*/
boolean collidable[] = new boolean[]{true};
// reference count use in set/clear Live to remember how
// many references of the original branch that attach()/detach()
int refCount = 1;
// background node whose geometry branch contains this node
BackgroundRetained geometryBackground = null;
// behavior nodes
ArrayList behaviorNodes = new ArrayList(1);
// The current list of child transform group nodes or link nodes
// under a transform group
ArrayList childTransformLinks = null;
// closest parent which is a TransformGroupRetained or sharedGroupRetained
GroupRetained parentTransformLink = null;
// switch Level, start from -1, increment by one for each SwitchNode
// encounter in a branch, one per key
int switchLevels[] = new int[]{-1};
// closest switch parent, one per key
SwitchRetained closestSwitchParents[] = new SwitchRetained[]{null};
// the child id from the closest switch parent, one per key
int closestSwitchIndices[] = new int[]{-1};
// The current list of leaf nodes for switch targets
Targets[] switchTargets = null;
// The current list of closest child switch nodes or
// link nodes under a switch node
ArrayList childSwitchLinks = null;
// closest parent which is a SwitchRetained or sharedGroupRetained
GroupRetained parentSwitchLink = null;
SharedGroupRetained lastSharedGroup = null;
int traverseFlags = 0;
// Use for set live.
Transform3D[][] localToVworld = null;
int[][] localToVworldIndex = null;
HashKey[] localToVworldKeys = null;
// cached hashkey index to eliminate duplicate hash key index search
// currently used by Switch, can be extended for other node types
int[] hashkeyIndex = null;
ArrayList switchStates = null;
SetLiveState(VirtualUniverse u) {
universe = u;
}
void reset(Locale l) {
locale = l;
clear();
}
void clear() {
inSharedGroup = false;
inBackgroundGroup = false;
inViewSpecificGroup = false;
nodeList.clear();
viewScopedNodeList = null;
scopedNodesViewList = null;
notifyThreads = 0;
transformTargets = null;
lights = null;
fogs = null;
modelClips = null;
altAppearances = null;
viewLists = null;
changedViewGroup = null;
changedViewList = null;
keyList = null;
behaviorNodes.clear();
traverseFlags = 0;
ogList.clear();
ogChildIdList.clear();
ogOrderedIdList.clear();
ogCIOList.clear();
ogCIOTableList.clear();
pickable = new boolean[]{true};
collidable = new boolean[]{true};
refCount = 1;
geometryBackground = null;
transformLevels = new int[]{-1};
childTransformLinks = null;
parentTransformLink = null;
switchTargets = null;
switchLevels = new int[]{-1};
switchStates = null;
closestSwitchIndices = new int[]{-1};
closestSwitchParents = new SwitchRetained[]{null};
childSwitchLinks = null;
parentSwitchLink = null;
lastSharedGroup = null;
keys = null;
currentTransforms = new Transform3D[1][];
currentTransformsIndex = new int[1][];
localToVworld = null;
localToVworldIndex = null;
localToVworldKeys = null;
// XXXX: optimization for targetThreads computation, require
// cleanup in GroupRetained.doSetLive()
//transformTargetThreads = 0;
hashkeyIndex = null;
// Fix for issue 75
parentBranchGroupPaths = null;
branchGroupPaths = null;
orderedPaths = null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy