aboutsummaryrefslogtreecommitdiffstats
path: root/src/javax/media/j3d/VirtualUniverse.java
diff options
context:
space:
mode:
authorJulien Gouesse <[email protected]>2015-11-28 15:11:48 +0100
committerJulien Gouesse <[email protected]>2015-11-28 15:11:48 +0100
commitdbc98deea1884e44da2c74d6ea807253cdefa693 (patch)
tree29c3ee7dea82d7dd773d81f33f645dde67e43a17 /src/javax/media/j3d/VirtualUniverse.java
parent2c99f1329dc55bd496bce91b9aba956ecba3c67e (diff)
Relocate package prefix to org.jogamp.java3d
Diffstat (limited to 'src/javax/media/j3d/VirtualUniverse.java')
-rw-r--r--src/javax/media/j3d/VirtualUniverse.java1220
1 files changed, 0 insertions, 1220 deletions
diff --git a/src/javax/media/j3d/VirtualUniverse.java b/src/javax/media/j3d/VirtualUniverse.java
deleted file mode 100644
index 624bccb..0000000
--- a/src/javax/media/j3d/VirtualUniverse.java
+++ /dev/null
@@ -1,1220 +0,0 @@
-/*
- * 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 javax.media.j3d;
-
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Vector;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * A VirtualUniverse object is the top-level container for all scene
- * graphs. A virtual universe consists of a set of Locale objects,
- * each of which has a high-resolution position within the virtual
- * universe. An application or applet may have more than one
- * VirtualUniverse objects, but many applications will need only one.
- * Virtual universes are separate entities in that no node object may
- * exist in more than one virtual universe at any one time. Likewise,
- * the objects in one virtual universe are not visible in, nor do they
- * interact with objects in, any other virtual universe.
- * <p>
- * A VirtualUniverse object defines methods to enumerate its Locale
- * objects and to remove them from the virtual universe.
- *
- * <p>
- * For more information, see the
- * <a href="doc-files/intro.html">Introduction to the Java 3D API</a> and
- * <a href="doc-files/VirtualUniverse.html">Scene Graph Superstructure</a>
- * documents.
- *
- * @see Locale
- */
-
-public class VirtualUniverse extends Object {
- // NOTE TO DEVELOPERS:
- //
- // Developers who modify Java 3D in any way should modify
- // the auxiliary implementation vendor string in VersionInfo.java.
- // See that file for instructions.
-
- // The global MasterControl object. There is only one of these
- // for all of Java 3D.
- static MasterControl mc = null;
-
- // The lock to acquire before traversing the scene graph
- Object sceneGraphLock = new Object();
- Object behaviorLock = new Object();
-
-// A list of locales that are contained within this universe
-Vector<Locale> listOfLocales = new Vector<Locale>();
-
-// The list of view platforms, a changed flag and a cached array
-private ArrayList<ViewPlatformRetained> viewPlatforms = new ArrayList<ViewPlatformRetained>();
-private boolean vpChanged = false;
-private ViewPlatformRetained[] viewPlatformList = new ViewPlatformRetained[0];
-
- // The Behavior Scheduler Thread for this Virtual Universe.
- BehaviorScheduler behaviorScheduler = null;
-
-
- // The geometry structure for this Universe
- GeometryStructure geometryStructure = null;
-
- // The transform structure for this Universe
- TransformStructure transformStructure = null;
-
- // The behavior structure for this Universe
- BehaviorStructure behaviorStructure = null;
-
- // The sound structure for this Universe
- SoundStructure soundStructure = null;
-
- // The rendering attributes structure for this Universe
- RenderingEnvironmentStructure renderingEnvironmentStructure = null;
-
- // Reference count of users of the RenderingEnvironmentStructure
- int renderingEnvironmentStructureRefCount = 0;
-
- // This is a global counter for node id's.
- long nodeIdCount = 0;
-
- // This is a global counter for view id's.
- int viewIdCount = 0;
-
-// This is a vector of free nodeid's
-Vector<String> nodeIdFreeList = new Vector<String>();
-
-// This is a vector of free viewid's
-ArrayList<Integer> viewIdFreeList = new ArrayList<Integer>();
-
- // The number of nodes in this universe
- int numNodes = 0;
-
- // The State object used when branch graphs are added
- SetLiveState setLiveState;
-
- // This is an array of references to objects that need their mirror
- // copies updated. It is updated by the traverser and emptied by
- // the view thread.
- ObjectUpdate[] updateObjects = new ObjectUpdate[16];
-
- // The number of valid entries in updateObjects
- int updateObjectsLen = 0;
-
- // The current primary view for this universe
- View currentView;
-
- // A flag to indicate that we are in a behavior routine
- boolean inBehavior = false;
-
- // Flags to indicate if events need to be delivered
- boolean enableComponent = false;
- boolean enableFocus = false;
- boolean enableKey = false;
- boolean enableMouse = false;
- boolean enableMouseMotion = false;
- boolean enableMouseWheel = false;
-
- // Keep track of how many active View use this universe
- int activeViewCount = 0;
-
- // Root ThreadGroup for creating Java 3D threads
- static ThreadGroup rootThreadGroup;
-
- // Properties object for getProperties
- private static J3dQueryProps properties = null;
-
- // Flag to indicate that user thread has to
- // stop until MC completely register/unregister View.
- View regViewWaiting = null;
- View unRegViewWaiting = null;
- boolean isSceneGraphLock = false;
-
- private Object waitLock = new Object();
-
- // Set of scene graph structure change listeners
- private HashSet<GraphStructureChangeListener> structureChangeListenerSet = null;
-
- // Set of shader error listeners
- private HashSet<ShaderErrorListener> shaderErrorListenerSet = null;
- private ShaderErrorListener defaultShaderErrorListener =
- ShaderProgram.getDefaultErrorListener();
-
- // Set of rendering error listeners
- private static HashSet<RenderingErrorListener> renderingErrorListenerSet = null;
- private static RenderingErrorListener defaultRenderingErrorListener =
- Renderer.getDefaultErrorListener();
-
- /**
- * Constructs a new VirtualUniverse.
- */
- public VirtualUniverse() {
- setLiveState = new SetLiveState(this);
- initMCStructure();
- }
-
-
- void initMCStructure() {
- if (geometryStructure != null) {
- geometryStructure.cleanup();
- }
- geometryStructure = new GeometryStructure(this);
- if (transformStructure != null) {
- transformStructure.cleanup();
- }
- transformStructure = new TransformStructure(this);
- if (behaviorStructure != null) {
- behaviorStructure.cleanup();
- }
- behaviorStructure = new BehaviorStructure(this);
- if (soundStructure != null) {
- soundStructure.cleanup();
- }
- soundStructure = new SoundStructure(this);
- if (renderingEnvironmentStructure != null) {
- renderingEnvironmentStructure.cleanup();
- }
- renderingEnvironmentStructure = new
- RenderingEnvironmentStructure(this);
-
- }
-
- /**
- * Initialize the native interface and anything else that needs
- * to be initialized.
- */
- static void loadLibraries() {
- // No need to do anything. The act of calling any method in this
- // class is sufficient to cause the static MasterControl object
- // to be created which, in turn, loads the native libraries.
- }
-
- static {
- boolean isLoggableConfig = MasterControl.isCoreLoggable(Level.CONFIG);
- Logger logger = MasterControl.getCoreLogger();
-
- // Print out version information unless this is a
- // non-debuggable, release (fcs) build
- if (isLoggableConfig || J3dDebug.devPhase || VersionInfo.isDebug) {
- StringBuffer strBuf = new StringBuffer("3D ");
- if (J3dDebug.devPhase) {
- strBuf.append("[dev] ");
- }
- strBuf.append(VersionInfo.getVersion());
- String str = strBuf.toString();
- if (isLoggableConfig) {
- logger.config(str);
- } else {
- System.err.println(str);
- System.err.println();
- }
- }
-
- // Print out debugging information for debug builds
- if (isLoggableConfig || VersionInfo.isDebug) {
- StringBuffer strBuf = new StringBuffer();
- strBuf.append("Initializing 3D runtime system:\n").
- append(" version = ").
- append(VersionInfo.getVersion()).
- append("\n").
- append(" vendor = ").
- append(VersionInfo.getVendor()).
- append("\n").
- append(" specification.version = ").
- append(VersionInfo.getSpecificationVersion()).
- append("\n").
- append(" specification.vendor = ").
- append(VersionInfo.getSpecificationVendor());
- String str = strBuf.toString();
- if (isLoggableConfig) {
- logger.config(str);
- } else {
- System.err.println(str);
- System.err.println();
- }
- }
-
- // Java 3D cannot run in headless mode, so we will throw a
- // HeadlessException if isHeadless() is true. This avoids a
- // cryptic error message from MasterControl.loadLibraries().
- if (java.awt.GraphicsEnvironment.isHeadless()) {
- throw new java.awt.HeadlessException();
- }
-
- // Load the native libraries and create the static
- // MasterControl object
- MasterControl.loadLibraries();
- mc = new MasterControl();
-
- // Print out debugging information for debug builds
- if (isLoggableConfig || VersionInfo.isDebug) {
- StringBuffer strBuf = new StringBuffer();
- strBuf.append("3D system initialized\n").
- append(" rendering pipeline = ").
- append(Pipeline.getPipeline().getPipelineName());
- String str = strBuf.toString();
- if (isLoggableConfig) {
- logger.config(str);
- } else {
- System.err.println(str);
- System.err.println();
- }
- }
- }
-
- /**
- * Adds a locale at the end of list of locales
- * @param locale the locale to be added
- */
- void addLocale(Locale locale) {
- listOfLocales.addElement(locale);
- }
-
- /**
- * Removes a Locale and its associates branch graphs from this
- * universe. All branch graphs within the specified Locale are
- * detached, regardless of whether their ALLOW_DETACH capability
- * bits are set. The Locale is then marked as being dead: no
- * branch graphs may subsequently be attached.
- *
- * @param locale the Locale to be removed.
- *
- * @exception IllegalArgumentException if the specified Locale is not
- * attached to this VirtualUniverse.
- *
- * @since Java 3D 1.2
- */
- public void removeLocale(Locale locale) {
- if (locale.getVirtualUniverse() != this) {
- throw new IllegalArgumentException(J3dI18N.getString("VirtualUniverse0"));
- }
-
- listOfLocales.removeElement(locale);
- locale.removeFromUniverse();
- if (isEmpty()) {
- VirtualUniverse.mc.postRequest(MasterControl.EMPTY_UNIVERSE,
- this);
- }
- setLiveState.reset(null);
- }
-
-
- /**
- * Removes all Locales and their associates branch graphs from
- * this universe. All branch graphs within each Locale are
- * detached, regardless of whether their ALLOW_DETACH capability
- * bits are set. Each Locale is then marked as being dead: no
- * branch graphs may subsequently be attached. This method
- * should be called by applications and applets to allow
- * Java 3D to cleanup its resources.
- *
- * @since Java 3D 1.2
- */
- public void removeAllLocales() {
- // NOTE: this is safe because Locale.removeFromUniverse does not
- // remove the Locale from the listOfLocales
- int i;
-
-
- for (i = listOfLocales.size() - 1; i > 0; i--) {
- listOfLocales.get(i).removeFromUniverse();
- }
-
- if (i >= 0) {
- // We have to clear() the listOfLocales first before
- // invoke the last removeFromUniverse() so that isEmpty()
- // (call from View.deactivate() ) will return true and
- // threads can destroy from MC.
- Locale loc = listOfLocales.get(0);
- listOfLocales.clear();
- loc.removeFromUniverse();
- }
- VirtualUniverse.mc.postRequest(MasterControl.EMPTY_UNIVERSE,
- this);
-
- setLiveState.reset(null);
- }
-
-
-/**
- * Returns the enumeration object of all locales in this virtual universe.
- *
- * @return the enumeration object
- */
-public Enumeration<Locale> getAllLocales() {
- return this.listOfLocales.elements();
-}
-
- /**
- * Returns the number of locales.
- * @return the count of locales
- */
- public int numLocales() {
- return this.listOfLocales.size();
- }
-
-
- /**
- * Sets the priority of all Java 3D threads to the specified
- * value. The default value is the priority of the thread that
- * started Java 3D.
- *
- * @param priority the new thread priority
- *
- * @exception IllegalArgumentException if the priority is not in
- * the range MIN_PRIORITY to MAX_PRIORITY
- *
- * @exception SecurityException if the priority is greater than
- * that of the calling thread
- *
- * @since Java 3D 1.2
- */
- public static void setJ3DThreadPriority(int priority) {
- if (priority > Thread.MAX_PRIORITY) {
- priority = Thread.MAX_PRIORITY;
- } else if (priority < Thread.MIN_PRIORITY) {
- priority = Thread.MIN_PRIORITY;
- }
- VirtualUniverse.mc.setThreadPriority(priority);
- }
-
-
- /**
- * Retrieves that priority of Java 3D's threads.
- *
- * @return the current priority of Java 3D's threads
- *
- * @since Java 3D 1.2
- */
- public static int getJ3DThreadPriority() {
- return VirtualUniverse.mc.getThreadPriority();
- }
-
-
- /**
- * Returns a read-only Map object containing key-value pairs that
- * define various global properties for Java 3D. All of the keys
- * are String objects. The values are key-specific, but most will
- * be String objects.
- *
- * <p>
- * The set of global Java 3D properties always includes values for
- * the following keys:
- *
- * <p>
- * <ul>
- * <table BORDER=1 CELLSPACING=1 CELLPADDING=1>
- * <tr>
- * <td><b>Key (String)</b></td>
- * <td><b>Value Type</b></td>
- * </tr>
- * <tr>
- * <td><code>j3d.version</code></td>
- * <td>String</td>
- * </tr>
- * <tr>
- * <td><code>j3d.vendor</code></td>
- * <td>String</td>
- * </tr>
- * <tr>
- * <td><code>j3d.specification.version</code></td>
- * <td>String</td>
- * </tr>
- * <tr>
- * <td><code>j3d.specification.vendor</code></td>
- * <td>String</td>
- * </tr>
- * <tr>
- * <td><code>j3d.pipeline</code></td>
- * <td>String</td>
- * </tr>
- * <tr>
- * <td><code>j3d.renderer</code></td>
- * <td>String</td>
- * </tr>
- * </table>
- * </ul>
- *
- * <p>
- * The descriptions of the values returned for each key are as follows:
- *
- * <p>
- * <ul>
- *
- * <li>
- * <code>j3d.version</code>
- * <ul>
- * A String that defines the Java 3D implementation version.
- * The portion of the implementation version string before the first
- * space must adhere to one of the the following three formats
- * (anything after the first space is an optional free-form addendum
- * to the version):
- * <ul>
- * <i>x</i>.<i>y</i>.<i>z</i><br>
- * <i>x</i>.<i>y</i>.<i>z</i>_<i>p</i><br>
- * <i>x</i>.<i>y</i>.<i>z</i>-<i>ssss</i><br>
- * </ul>
- * where:
- * <ul>
- * <i>x</i> is the major version number<br>
- * <i>y</i> is the minor version number<br>
- * <i>z</i> is the sub-minor version number<br>
- * <i>p</i> is the patch revision number <br>
- * <i>ssss</i> is a string, identifying a non-release build
- * (e.g., beta1, build47, rc1, etc.). It may only
- * contain letters, numbers, periods, dashes, or
- * underscores.
- * </ul>
- * </ul>
- * </li>
- * <p>
- *
- * <li>
- * <code>j3d.vendor</code>
- * <ul>
- * String that specifies the Java 3D implementation vendor.
- * </ul>
- * </li>
- * <p>
- *
- * <li>
- * <code>j3d.specification.version</code>
- * <ul>
- * A String that defines the Java 3D specification version.
- * This string must be of the following form:
- * <ul>
- * <i>x</i>.<i>y</i>
- * </ul>
- * where:
- * <ul>
- * <i>x</i> is the major version number<br>
- * <i>y</i> is the minor version number<br>
- * </ul>
- * No other characters are allowed in the specification version string.
- * </ul>
- * </li>
- * <p>
- *
- * <li>
- * <code>j3d.specification.vendor</code>
- * <ul>
- * String that specifies the Java 3D specification vendor.
- * </ul>
- * </li>
- * <p>
- *
- * <li>
- * <code>j3d.pipeline</code>
- * <ul>
- * String that specifies the Java 3D rendering pipeline. This could
- * be one of: "NATIVE_OGL", "NATIVE_D3D", or "JOGL". Others could be
- * added in the future.
- * </ul>
- * </li>
- * <p>
- *
- * <li>
- * <code>j3d.renderer</code>
- * <ul>
- * String that specifies the underlying rendering library. This could
- * be one of: "OpenGL" or "DirectX". Others could be added in the future.
- * </ul>
- * </li>
- * <p>
- *
- * </ul>
- *
- * @return the global Java 3D properties
- *
- * @since Java 3D 1.3
- */
- public static final Map getProperties() {
- if (properties == null) {
- // Create lists of keys and values
- ArrayList<String> keys = new ArrayList<String>();
- ArrayList<Object> values = new ArrayList<Object>();
-
- // Implementation version string is obtained from the
- // ImplementationVersion class.
- keys.add("j3d.version");
- values.add(VersionInfo.getVersion());
-
- keys.add("j3d.vendor");
- values.add(VersionInfo.getVendor());
-
- keys.add("j3d.specification.version");
- values.add(VersionInfo.getSpecificationVersion());
-
- keys.add("j3d.specification.vendor");
- values.add(VersionInfo.getSpecificationVendor());
-
- keys.add("j3d.renderer");
- values.add(Pipeline.getPipeline().getRendererName());
-
- keys.add("j3d.pipeline");
- values.add(Pipeline.getPipeline().getPipelineName());
-
- // Now Create read-only properties object
- properties = new J3dQueryProps(keys, values);
- }
- return properties;
- }
-
-
- /**
- * This returns the next available nodeId as a string.
- */
- // XXXX: reuse of id's imply a slight collision problem in the
- // render queue's.
- // BUG 4181362
- String getNodeId() {
- String str;
-
- if (nodeIdFreeList.size() == 0) {
- str = Long.toString(nodeIdCount);
- nodeIdCount++;
- } else {
- // Issue 496: Remove last object using index to avoid performance
- // hit of a needless linear search.
- int idx = nodeIdFreeList.size() - 1;
- str = nodeIdFreeList.remove(idx);
- }
- return(str);
- }
-
- /**
- * This returns the next available viewId
- */
- Integer getViewId() {
- Integer id;
- int size;
-
- synchronized (viewIdFreeList) {
- size = viewIdFreeList.size();
- if (size == 0) {
- id = new Integer(viewIdCount++);
- } else {
- id = viewIdFreeList.remove(size - 1);
- }
- }
- return(id);
- }
-
- /**
- * This returns a viewId to the freelist
- */
- void addViewIdToFreeList(Integer viewId) {
- synchronized (viewIdFreeList) {
- viewIdFreeList.add(viewId);
- }
- }
-
-void addViewPlatform(ViewPlatformRetained vp) {
- synchronized (viewPlatforms) {
- vpChanged = true;
- viewPlatforms.add(vp);
- }
-}
-
-void removeViewPlatform(ViewPlatformRetained vp) {
- synchronized (viewPlatforms) {
- if (viewPlatforms.remove(vp))
- vpChanged = true;
- }
-}
-
-ViewPlatformRetained[] getViewPlatformList() {
- synchronized (viewPlatforms) {
- if (vpChanged) {
- viewPlatformList = viewPlatforms.toArray(new ViewPlatformRetained[viewPlatforms.size()]);
- vpChanged = false;
- }
-
- return viewPlatformList;
- }
-}
-
- void checkForEnableEvents() {
- if (enableFocus) {
- enableFocusEvents();
- }
- if (enableKey) {
- enableKeyEvents();
- }
- if (enableMouse) {
- enableMouseEvents();
- }
- if (enableMouseMotion) {
- enableMouseMotionEvents();
- }
- if (enableMouseWheel) {
- enableMouseWheelEvents();
- }
-
- }
-
-void disableFocusEvents() {
- ViewPlatformRetained[] vps = getViewPlatformList();
- enableFocus = false;
-
- for (int i = 0; i < vps.length; i++) {
- View[] views = vps[i].getViewList();
- for (int j = views.length - 1; j >= 0; j--) {
- Enumeration<Canvas3D> cvs = views[j].getAllCanvas3Ds();
- while (cvs.hasMoreElements()) {
- Canvas3D cv = cvs.nextElement();
- // offscreen canvas does not have event catcher
- if (cv.eventCatcher != null)
- cv.eventCatcher.disableFocusEvents();
- }
- }
- }
-}
-
-void enableFocusEvents() {
- ViewPlatformRetained[] vps = getViewPlatformList();
- enableFocus = true;
-
- for (int i = 0; i < vps.length; i++) {
- View[] views = vps[i].getViewList();
- for (int j = views.length - 1; j >= 0; j--) {
- Enumeration<Canvas3D> cvs = views[j].getAllCanvas3Ds();
- while (cvs.hasMoreElements()) {
- Canvas3D cv = cvs.nextElement();
- // offscreen canvas does not have event catcher
- if (cv.eventCatcher != null)
- cv.eventCatcher.enableFocusEvents();
- }
- }
- }
-}
-
-void disableKeyEvents() {
- ViewPlatformRetained[] vps = getViewPlatformList();
- enableKey = false;
-
- for (int i = 0; i < vps.length; i++) {
- View[] views = vps[i].getViewList();
- for (int j = views.length - 1; j >= 0; j--) {
- Enumeration<Canvas3D> cvs = views[j].getAllCanvas3Ds();
- while (cvs.hasMoreElements()) {
- Canvas3D cv = cvs.nextElement();
- // offscreen canvas does not have event catcher
- if (cv.eventCatcher != null)
- cv.eventCatcher.disableKeyEvents();
- }
- }
- }
-}
-
-void enableKeyEvents() {
- ViewPlatformRetained[] vps = getViewPlatformList();
- enableKey = true;
-
- for (int i = 0; i < vps.length; i++) {
- View[] views = vps[i].getViewList();
- for (int j = views.length - 1; j >= 0; j--) {
- Enumeration<Canvas3D> cvs = views[j].getAllCanvas3Ds();
- while (cvs.hasMoreElements()) {
- Canvas3D cv = cvs.nextElement();
- // offscreen canvas does not have event catcher
- if (cv.eventCatcher != null)
- cv.eventCatcher.enableKeyEvents();
- }
- }
- }
-}
-
-void disableMouseEvents() {
- ViewPlatformRetained[] vps = getViewPlatformList();
- enableMouse = false;
-
- for (int i = 0; i < vps.length; i++) {
- View[] views = vps[i].getViewList();
- for (int j = views.length - 1; j >= 0; j--) {
- Enumeration<Canvas3D> cvs = views[j].getAllCanvas3Ds();
- while (cvs.hasMoreElements()) {
- Canvas3D cv = cvs.nextElement();
- // offscreen canvas does not have event catcher
- if (cv.eventCatcher != null)
- cv.eventCatcher.disableMouseEvents();
- }
- }
- }
-}
-
-void enableMouseEvents() {
- ViewPlatformRetained[] vps = getViewPlatformList();
- enableMouse = true;
-
- for (int i = 0; i < vps.length; i++) {
- View[] views = vps[i].getViewList();
- for (int j = views.length - 1; j >= 0; j--) {
- Enumeration<Canvas3D> cvs = views[j].getAllCanvas3Ds();
- while (cvs.hasMoreElements()) {
- Canvas3D cv = cvs.nextElement();
- // offscreen canvas does not have event catcher
- if (cv.eventCatcher != null)
- cv.eventCatcher.enableMouseEvents();
- }
- }
- }
-}
-
-void disableMouseMotionEvents() {
- ViewPlatformRetained[] vps = getViewPlatformList();
- enableMouseMotion = false;
-
- for (int i = 0; i < vps.length; i++) {
- View[] views = vps[i].getViewList();
- for (int j = views.length - 1; j >= 0; j--) {
- Enumeration<Canvas3D> cvs = views[j].getAllCanvas3Ds();
- while (cvs.hasMoreElements()) {
- Canvas3D cv = cvs.nextElement();
- // offscreen canvas does not have event catcher
- if (cv.eventCatcher != null)
- cv.eventCatcher.disableMouseMotionEvents();
- }
- }
- }
-}
-
-void enableMouseMotionEvents() {
- ViewPlatformRetained[] vps = getViewPlatformList();
- enableMouseMotion = true;
-
- for (int i = 0; i < vps.length; i++) {
- View[] views = vps[i].getViewList();
- for (int j = views.length - 1; j >= 0; j--) {
- Enumeration<Canvas3D> cvs = views[j].getAllCanvas3Ds();
- while (cvs.hasMoreElements()) {
- Canvas3D cv = cvs.nextElement();
- // offscreen canvas does not have event catcher
- if (cv.eventCatcher != null)
- cv.eventCatcher.enableMouseMotionEvents();
- }
- }
- }
-}
-
-void disableMouseWheelEvents() {
- ViewPlatformRetained[] vps = getViewPlatformList();
- enableMouseWheel = false;
-
- for (int i = 0; i < vps.length; i++) {
- View[] views = vps[i].getViewList();
- for (int j = views.length - 1; j >= 0; j--) {
- Enumeration<Canvas3D> cvs = views[j].getAllCanvas3Ds();
- while (cvs.hasMoreElements()) {
- Canvas3D cv = cvs.nextElement();
- // offscreen canvas does not have event catcher
- if (cv.eventCatcher != null)
- cv.eventCatcher.disableMouseWheelEvents();
- }
- }
- }
-}
-
-void enableMouseWheelEvents() {
- ViewPlatformRetained[] vps = getViewPlatformList();
- enableMouseWheel = true;
-
- for (int i = 0; i < vps.length; i++) {
- View[] views = vps[i].getViewList();
- for (int j = views.length - 1; j >= 0; j--) {
- Enumeration<Canvas3D> cvs = views[j].getAllCanvas3Ds();
- while (cvs.hasMoreElements()) {
- Canvas3D cv = cvs.nextElement();
- // offscreen canvas does not have event catcher
- if (cv.eventCatcher != null)
- cv.eventCatcher.enableMouseWheelEvents();
- }
- }
- }
-}
-
- /**
- * Sets the "current" view (during view activation) for this virtual
- * universe.
- * @param last activated view
- */
- final void setCurrentView(View view) {
- this.currentView = view;
- }
-
- /**
- * Returns the "current" view (the last view activated for this virtual
- * universe.
- * @return last activated view
- */
- final View getCurrentView() {
- return this.currentView;
- }
-
-
- /**
- * Method to return the root thread group. This must be called from
- * within a doPrivileged block.
- */
- static ThreadGroup getRootThreadGroup() {
- return rootThreadGroup;
- }
-
- /**
- * return true if all Locales under it don't have branchGroup
- * attach to it.
- */
- boolean isEmpty() {
- Enumeration<Locale> elm = listOfLocales.elements();
-
- while (elm.hasMoreElements()) {
- Locale loc = elm.nextElement();
- if (!loc.branchGroups.isEmpty()) {
- return false;
- }
- }
- return true;
- }
-
- void resetWaitMCFlag() {
- synchronized (waitLock) {
- regViewWaiting = null;
- unRegViewWaiting = null;
- isSceneGraphLock = true;
- }
- }
-
- void waitForMC() {
- synchronized (waitLock) {
- if (unRegViewWaiting != null) {
- if ((regViewWaiting == null) ||
- (regViewWaiting != unRegViewWaiting)) {
- while (!unRegViewWaiting.doneUnregister) {
- MasterControl.threadYield();
- }
- unRegViewWaiting.doneUnregister = false;
- unRegViewWaiting = null;
- }
- }
-
- if (regViewWaiting != null) {
- while (!VirtualUniverse.mc.isRegistered(regViewWaiting)) {
- MasterControl.threadYield();
- }
- regViewWaiting = null;
- }
- isSceneGraphLock = false;
- }
- }
-
- /**
- * Adds the specified GraphStructureChangeListener to the set of listeners
- * that will be notified when the graph structure is changed on a live
- * scene graph. If the specifed listener is null no action is taken and no
- * exception is thrown.
- *
- * @param listener the listener to add to the set.
- *
- * @since Java 3D 1.4
- */
- public void addGraphStructureChangeListener(GraphStructureChangeListener listener) {
- if (listener == null) {
- return;
- }
-
- if (structureChangeListenerSet == null) {
- structureChangeListenerSet = new HashSet<GraphStructureChangeListener>();
- }
-
- synchronized(structureChangeListenerSet) {
- structureChangeListenerSet.add(listener);
- }
- }
-
- /**
- * Removes the specified GraphStructureChangeListener from the set of listeners. This
- * method performs no function, nor does it throw an exception if the specified listener
- * is not currently in the set or is null.
- *
- * @param listener the listener to remove from the set.
- *
- * @since Java 3D 1.4
- */
- public void removeGraphStructureChangeListener(GraphStructureChangeListener listener) {
- if (structureChangeListenerSet == null) {
- return;
- }
-
- synchronized(structureChangeListenerSet) {
- structureChangeListenerSet.remove(listener);
- }
- }
-
- /**
- * Processes all live BranchGroup add and removes and notifies
- * any registered listeners. Used for add and remove
- */
- void notifyStructureChangeListeners(boolean add, Object parent, BranchGroup child) {
- if (structureChangeListenerSet == null) {
- return;
- }
-
- synchronized(structureChangeListenerSet) {
- Iterator<GraphStructureChangeListener> it = structureChangeListenerSet.iterator();
- while(it.hasNext()) {
- GraphStructureChangeListener listener = it.next();
- try {
- if (add) {
- listener.branchGroupAdded(parent, child);
- } else {
- listener.branchGroupRemoved(parent, child);
- }
- }
- catch (RuntimeException e) {
- System.err.println("Exception occurred in GraphStructureChangeListener:");
- e.printStackTrace();
- }
- catch (Error e) {
- // Issue 264 - catch Error
- System.err.println("Error occurred in GraphStructureChangeListener:");
- e.printStackTrace();
- }
- }
- }
- }
-
- /**
- * Processes all live BranchGroup moves and notifies
- * any registered listeners. Used for moveTo
- */
- void notifyStructureChangeListeners(Object oldParent, Object newParent, BranchGroup child) {
- if (structureChangeListenerSet == null) {
- return;
- }
-
- synchronized(structureChangeListenerSet) {
- Iterator<GraphStructureChangeListener> it = structureChangeListenerSet.iterator();
- while(it.hasNext()) {
- GraphStructureChangeListener listener = it.next();
- try {
- listener.branchGroupMoved(oldParent, newParent, child);
- }
- catch (RuntimeException e) {
- System.err.println("Exception occurred in GraphStructureChangeListener:");
- e.printStackTrace();
- }
- catch (Error e) {
- // Issue 264 - catch Error
- System.err.println("Error occurred in GraphStructureChangeListener:");
- e.printStackTrace();
- }
- }
- }
- }
-
-
- /**
- * Adds the specified ShaderErrorListener to the set of listeners
- * that will be notified when a programmable shader error is
- * detected on a live scene graph. If the specifed listener is
- * null no action is taken and no exception is thrown.
- * If a shader error occurs, the listeners will be called
- * asynchronously from a separate notification thread. The Java 3D
- * renderer and behavior scheduler will continue to run as if the
- * error had not occurred, except that shading will be disabled
- * for the objects in error. If applications desire to detach or
- * modify the scene graph as a result of the error, they should
- * use a behavior post if they want that change to be
- * synchronous with the renderer.
- *
- * @param listener the listener to add to the set.
- *
- * @since Java 3D 1.4
- */
- public void addShaderErrorListener(ShaderErrorListener listener) {
- if (listener == null) {
- return;
- }
-
- if (shaderErrorListenerSet == null) {
- shaderErrorListenerSet = new HashSet<ShaderErrorListener>();
- }
-
- synchronized(shaderErrorListenerSet) {
- shaderErrorListenerSet.add(listener);
- }
- }
-
- /**
- * Removes the specified ShaderErrorListener from the set of
- * listeners. This method performs no function, nor does it throw
- * an exception if the specified listener is not currently in the
- * set or is null.
- *
- * @param listener the listener to remove from the set.
- *
- * @since Java 3D 1.4
- */
- public void removeShaderErrorListener(ShaderErrorListener listener) {
- if (shaderErrorListenerSet == null) {
- return;
- }
-
- synchronized(shaderErrorListenerSet) {
- shaderErrorListenerSet.remove(listener);
- }
- }
-
- /**
- * Notifies all listeners of a shader error. If no listeners exist, a default
- * listener is notified.
- */
- void notifyShaderErrorListeners(ShaderError error) {
- boolean errorReported = false;
-
- // Notify all error listeners in the set
- if (shaderErrorListenerSet != null) {
- synchronized(shaderErrorListenerSet) {
- Iterator<ShaderErrorListener> it = shaderErrorListenerSet.iterator();
- while(it.hasNext()) {
- ShaderErrorListener listener = it.next();
- try {
- listener.errorOccurred(error);
- }
- catch (RuntimeException e) {
- System.err.println("Exception occurred in ShaderErrorListener:");
- e.printStackTrace();
- }
- catch (Error e) {
- // Issue 264 - catch Error
- System.err.println("Error occurred in ShaderErrorListener:");
- e.printStackTrace();
- }
- errorReported = true;
- }
- }
- }
-
- // Notify the default error listener if the set is null or empty
- if (!errorReported) {
- defaultShaderErrorListener.errorOccurred(error);
- }
- }
-
-
- // Issue 260 : rendering error listeners.
-
- /**
- * Adds the specified RenderingErrorListener to the set of listeners
- * that will be notified when a rendering error is detected.
- * If the specifed listener is null no action is taken and no exception
- * is thrown.
- * If a rendering error occurs, the listeners will be called
- * asynchronously from a separate notification thread. If the set
- * of listeners is empty, a default listener is notified. The
- * default listener prints the error information to System.err and
- * then calls System.exit().
- *
- * @param listener the listener to add to the set.
- *
- * @since Java 3D 1.5
- */
- public static void addRenderingErrorListener(RenderingErrorListener listener) {
- if (listener == null) {
- return;
- }
-
- if (renderingErrorListenerSet == null) {
- renderingErrorListenerSet = new HashSet<RenderingErrorListener>();
- }
-
- synchronized(renderingErrorListenerSet) {
- renderingErrorListenerSet.add(listener);
- }
- }
-
- /**
- * Removes the specified RenderingErrorListener from the set of
- * listeners. This method performs no function, nor does it throw
- * an exception if the specified listener is not currently in the
- * set or is null.
- *
- * @param listener the listener to remove from the set.
- *
- * @since Java 3D 1.5
- */
- public static void removeRenderingErrorListener(RenderingErrorListener listener) {
- if (renderingErrorListenerSet == null) {
- return;
- }
-
- synchronized(renderingErrorListenerSet) {
- renderingErrorListenerSet.remove(listener);
- }
- }
-
- /**
- * Notifies all listeners of a rendering error. If no listeners exist,
- * a default listener is notified.
- */
- static void notifyRenderingErrorListeners(RenderingError error) {
- boolean errorReported = false;
-
- // Notify all error listeners in the set
- if (renderingErrorListenerSet != null) {
- synchronized(renderingErrorListenerSet) {
- Iterator<RenderingErrorListener> it = renderingErrorListenerSet.iterator();
- while(it.hasNext()) {
- RenderingErrorListener listener = it.next();
- try {
- listener.errorOccurred(error);
- }
- catch (RuntimeException e) {
- System.err.println("Exception occurred in RenderingErrorListener:");
- e.printStackTrace();
- }
- catch (Error e) {
- // Issue 264 - catch Error
- System.err.println("Error occurred in RenderingErrorListener:");
- e.printStackTrace();
- }
- errorReported = true;
- }
- }
- }
-
- // Notify the default error listener if the set is null or empty
- if (!errorReported) {
- defaultRenderingErrorListener.errorOccurred(error);
- }
- }
-
-}