summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Russel <[email protected]>2005-07-19 01:00:42 +0000
committerKenneth Russel <[email protected]>2005-07-19 01:00:42 +0000
commit730e752dc282ab4230e6fc80d934011bffdc6007 (patch)
tree419398176a9d7d1e47be48fa53ad9fc1b8f13143
parent35435c313ba527c9bea35a14f72492d2f80a9c84 (diff)
Moved all functionality from GLContextFactory implementations into
concrete GLDrawableFactory implementations. Made GLDrawableFactory abstract and added GLDrawableFactoryImpl to support creation of offscreen GLDrawables for non-pbuffer fallback path of GLJPanel. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/branches/JSR-231@329 232f8b59-042b-4e1e-8c03-345bb8c30851
-rw-r--r--src/net/java/games/jogl/GLCanvas.java31
-rw-r--r--src/net/java/games/jogl/GLDrawableFactory.java90
-rw-r--r--src/net/java/games/jogl/GLJPanel.java2
-rw-r--r--src/net/java/games/jogl/impl/GLContextFactory.java118
-rw-r--r--src/net/java/games/jogl/impl/macosx/MacOSXGLContextFactory.java118
-rw-r--r--src/net/java/games/jogl/impl/windows/WindowsGLContextFactory.java245
-rw-r--r--src/net/java/games/jogl/impl/windows/WindowsPbufferGLContext.java2
-rw-r--r--src/net/java/games/jogl/impl/windows/WindowsPbufferGLDrawable.java2
-rw-r--r--src/net/java/games/jogl/impl/x11/X11GLContext.java6
-rw-r--r--src/net/java/games/jogl/impl/x11/X11GLContextFactory.java381
-rw-r--r--src/net/java/games/jogl/impl/x11/X11GLDrawable.java6
-rw-r--r--src/net/java/games/jogl/impl/x11/X11OffscreenGLDrawable.java4
-rw-r--r--src/net/java/games/jogl/impl/x11/X11OnscreenGLDrawable.java2
-rw-r--r--src/net/java/games/jogl/impl/x11/X11PbufferGLDrawable.java2
14 files changed, 89 insertions, 920 deletions
diff --git a/src/net/java/games/jogl/GLCanvas.java b/src/net/java/games/jogl/GLCanvas.java
index 3d9df841b..1089a22cb 100644
--- a/src/net/java/games/jogl/GLCanvas.java
+++ b/src/net/java/games/jogl/GLCanvas.java
@@ -60,7 +60,7 @@ import net.java.games.jogl.impl.*;
public class GLCanvas extends Canvas implements GLAutoDrawable {
- protected static final boolean DEBUG = Debug.debug("GLCanvas");
+ private static final boolean DEBUG = Debug.debug("GLCanvas");
private GLDrawableHelper drawableHelper = new GLDrawableHelper();
private GLDrawable drawable;
@@ -68,10 +68,31 @@ public class GLCanvas extends Canvas implements GLAutoDrawable {
private boolean autoSwapBufferMode = true;
private boolean sendReshape = false;
- public GLCanvas(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser,
- GLContext shareWith,
- GraphicsDevice device) {
+ /** Creates a new GLCanvas object. The passed GLCapabilities must be
+ non-null and specifies the OpenGL capabilities for the
+ component. The GLCapabilitiesChooser must be non-null and
+ specifies the algorithm for selecting one of the available
+ GLCapabilities for the component; the GLDrawableFactory uses a
+ DefaultGLCapabilitesChooser if the user does not provide
+ one. The passed GLContext may be null and specifies an OpenGL
+ context with which to share textures, display lists and other
+ OpenGL state. The passed GraphicsDevice must be non-null and
+ indicates the screen on which to create the GLCanvas; the
+ GLDrawableFactory uses the default screen device of the local
+ GraphicsEnvironment if the user does not provide one. */
+ protected GLCanvas(GLCapabilities capabilities,
+ GLCapabilitiesChooser chooser,
+ GLContext shareWith,
+ GraphicsDevice device) {
+ // The platform-specific GLDrawableFactory will only provide a
+ // non-null GraphicsConfiguration on platforms where this is
+ // necessary (currently only X11, as Windows allows the pixel
+ // format of the window to be set later and Mac OS X seems to
+ // handle this very differently than all other platforms). On
+ // other platforms this method returns null; it is the case (at
+ // least in the Sun AWT implementation) that this will result in
+ // equivalent behavior to calling the no-arg super() constructor
+ // for Canvas.
super(GLDrawableFactory.getFactory().chooseGraphicsConfiguration(capabilities, chooser, device));
drawable = GLDrawableFactory.getFactory().getGLDrawable(this, capabilities, chooser);
context = (GLContextImpl) drawable.createContext(shareWith);
diff --git a/src/net/java/games/jogl/GLDrawableFactory.java b/src/net/java/games/jogl/GLDrawableFactory.java
index bf2a8535d..8f0749d24 100644
--- a/src/net/java/games/jogl/GLDrawableFactory.java
+++ b/src/net/java/games/jogl/GLDrawableFactory.java
@@ -69,13 +69,46 @@ import net.java.games.jogl.impl.*;
GLJPanel} if the capabilities can not be met. </P>
*/
-public class GLDrawableFactory {
- private static GLDrawableFactory factory = new GLDrawableFactory();
-
- private GLDrawableFactory() {}
+public abstract class GLDrawableFactory {
+ private static GLDrawableFactory factory;
/** Returns the sole GLDrawableFactory instance. */
public static GLDrawableFactory getFactory() {
+ if (factory == null) {
+ try {
+ String osName = System.getProperty("os.name");
+ String osNameLowerCase = osName.toLowerCase();
+ Class factoryClass = null;
+
+ // Because there are some complications with generating all
+ // platforms' Java glue code on all platforms (among them that we
+ // would have to include jawt.h and jawt_md.h in the jogl
+ // sources, which we currently don't have to do) we break the only
+ // static dependencies with platform-specific code here using reflection.
+
+ if (osNameLowerCase.startsWith("wind")) {
+ factoryClass = Class.forName("net.java.games.jogl.impl.windows.WindowsGLDrawableFactory");
+ } else if (osNameLowerCase.startsWith("mac os x")) {
+ factoryClass = Class.forName("net.java.games.jogl.impl.macosx.MacOSXGLDrawableFactory");
+ } else {
+ // Assume Linux, Solaris, etc. Should probably test for these explicitly.
+ factoryClass = Class.forName("net.java.games.jogl.impl.x11.X11GLDrawableFactory");
+ }
+
+ if (factoryClass == null) {
+ throw new GLException("OS " + osName + " not yet supported");
+ }
+
+ factory = (GLDrawableFactory) factoryClass.newInstance();
+ } catch (ClassNotFoundException e) {
+ throw new GLException(e);
+ } catch (InstantiationException e) {
+ throw new GLException(e);
+ } catch (IllegalAccessException e) {
+ throw new GLException(e);
+ }
+ }
+
return factory;
}
@@ -92,12 +125,10 @@ public class GLDrawableFactory {
*
* @see java.awt.Canvas(java.awt.GraphicsConfiguration)
*/
- public GraphicsConfiguration
+ public abstract GraphicsConfiguration
chooseGraphicsConfiguration(GLCapabilities capabilities,
GLCapabilitiesChooser chooser,
- GraphicsDevice device) {
- return GLContextFactory.getFactory().chooseGraphicsConfiguration(capabilities, chooser, device);
- }
+ GraphicsDevice device);
/**
* Returns a GLDrawable that wraps a platform-specific window system
@@ -114,12 +145,10 @@ public class GLDrawableFactory {
* @throw GLException if any window system-specific errors caused
* the creation of the GLDrawable to fail.
*/
- public GLDrawable getGLDrawable(Object target,
- GLCapabilities capabilities,
- GLCapabilitiesChooser chooser)
- throws IllegalArgumentException, GLException {
- return GLContextFactory.getFactory().getGLDrawable(target, capabilities, chooser);
- }
+ public abstract GLDrawable getGLDrawable(Object target,
+ GLCapabilities capabilities,
+ GLCapabilitiesChooser chooser)
+ throws IllegalArgumentException, GLException;
//----------------------------------------------------------------------
// Methods to create high-level objects
@@ -150,15 +179,6 @@ public class GLDrawableFactory {
if (device == null) {
device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
}
- // The platform-specific GLContextFactory will only provide a
- // non-null GraphicsConfiguration on platforms where this is
- // necessary (currently only X11, as Windows allows the pixel
- // format of the window to be set later and Mac OS X seems to
- // handle this very differently than all other platforms). On
- // other platforms this method returns null; it is the case (at
- // least in the Sun AWT implementation) that this will result in
- // equivalent behavior to calling the no-arg super() constructor
- // for Canvas.
return new GLCanvas(capabilities,
chooser,
shareWith,
@@ -208,25 +228,15 @@ public class GLDrawableFactory {
* Returns true if it is possible to create a GLPbuffer with the
* given capabilites and dimensions.
*/
- public boolean canCreateGLPbuffer(GLCapabilities capabilities,
- int initialWidth,
- int initialHeight) {
- return GLContextFactory.getFactory().canCreateGLPbuffer(capabilities,
- initialWidth,
- initialHeight);
- }
-
+ public abstract boolean canCreateGLPbuffer(GLCapabilities capabilities,
+ int initialWidth,
+ int initialHeight);
/**
* Creates a GLPbuffer with the given capabilites and dimensions.
*/
- public GLPbuffer createGLPbuffer(GLCapabilities capabilities,
- int initialWidth,
- int initialHeight,
- GLContext shareWith) {
- return GLContextFactory.getFactory().createGLPbuffer(capabilities,
- initialWidth,
- initialHeight,
- shareWith);
- }
+ public abstract GLPbuffer createGLPbuffer(GLCapabilities capabilities,
+ int initialWidth,
+ int initialHeight,
+ GLContext shareWith);
}
diff --git a/src/net/java/games/jogl/GLJPanel.java b/src/net/java/games/jogl/GLJPanel.java
index 5f1a44602..c7024928e 100644
--- a/src/net/java/games/jogl/GLJPanel.java
+++ b/src/net/java/games/jogl/GLJPanel.java
@@ -438,7 +438,7 @@ public final class GLJPanel extends JPanel implements GLAutoDrawable {
}
// Fall-through path: create an offscreen context instead
- offscreenDrawable = GLContextFactory.getFactory().createOffscreenDrawable(offscreenCaps, chooser);
+ offscreenDrawable = GLDrawableFactoryImpl.getFactoryImpl().createOffscreenDrawable(offscreenCaps, chooser);
offscreenDrawable.setSize(Math.max(1, panelWidth), Math.max(1, panelHeight));
offscreenContext = (GLContextImpl) offscreenDrawable.createContext(shareWith);
offscreenContext.setSynchronized(true);
diff --git a/src/net/java/games/jogl/impl/GLContextFactory.java b/src/net/java/games/jogl/impl/GLContextFactory.java
deleted file mode 100644
index bbdb73853..000000000
--- a/src/net/java/games/jogl/impl/GLContextFactory.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package net.java.games.jogl.impl;
-
-import java.awt.Component;
-import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsDevice;
-import net.java.games.jogl.*;
-
-public abstract class GLContextFactory {
- private static GLContextFactory factory;
-
- public static GLContextFactory getFactory() {
- if (factory == null) {
- try {
- String osName = System.getProperty("os.name");
- String osNameLowerCase = osName.toLowerCase();
- Class factoryClass = null;
-
- // Because there are some complications with generating all
- // platforms' Java glue code on all platforms (among them that we
- // would have to include jawt.h and jawt_md.h in the jogl
- // sources, which we currently don't have to do) we break the only
- // static dependencies with platform-specific code here using reflection.
-
- if (osNameLowerCase.startsWith("wind")) {
- factoryClass = Class.forName("net.java.games.jogl.impl.windows.WindowsGLContextFactory");
- } else if (osNameLowerCase.startsWith("mac os x")) {
- factoryClass = Class.forName("net.java.games.jogl.impl.macosx.MacOSXGLContextFactory");
- } else {
- // Assume Linux, Solaris, etc. Should probably test for these explicitly.
- factoryClass = Class.forName("net.java.games.jogl.impl.x11.X11GLContextFactory");
- }
-
- if (factoryClass == null) {
- throw new GLException("OS " + osName + " not yet supported");
- }
-
- factory = (GLContextFactory) factoryClass.newInstance();
- } catch (ClassNotFoundException e) {
- throw new GLException(e);
- } catch (InstantiationException e) {
- throw new GLException(e);
- } catch (IllegalAccessException e) {
- throw new GLException(e);
- }
- }
-
- return factory;
- }
-
- /** Selects a GraphicsConfiguration on the specified GraphicsDevice
- that matches the desired GLCapabilities according to the
- specified GLCapabilitiesChooser's selection algorithm and any
- hints provided by the underlying window system. This routine is
- currently only implemented on X11, where it is necessary to
- choose the desired visual before creating the underlying AWT
- Canvas; on other platforms it returns null, yielding the default
- behavior. */
- public abstract GraphicsConfiguration chooseGraphicsConfiguration(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser,
- GraphicsDevice device);
-
- // GLCanvas support
- public abstract GLDrawable getGLDrawable(Object target,
- GLCapabilities capabilities,
- GLCapabilitiesChooser chooser);
-
- // GLJPanel support
- public abstract GLDrawableImpl createOffscreenDrawable(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser);
-
- public abstract boolean canCreateGLPbuffer(GLCapabilities capabilities,
- int initialWidth,
- int initialHeight);
-
- public abstract GLPbuffer createGLPbuffer(GLCapabilities capabilities,
- int initialWidth,
- int initialHeight,
- GLContext shareWith);
-}
diff --git a/src/net/java/games/jogl/impl/macosx/MacOSXGLContextFactory.java b/src/net/java/games/jogl/impl/macosx/MacOSXGLContextFactory.java
deleted file mode 100644
index 150468bfb..000000000
--- a/src/net/java/games/jogl/impl/macosx/MacOSXGLContextFactory.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package net.java.games.jogl.impl.macosx;
-
-import java.awt.Component;
-import java.awt.EventQueue;
-import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsDevice;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
-import net.java.games.jogl.*;
-import net.java.games.jogl.impl.*;
-
-public class MacOSXGLContextFactory extends GLContextFactory {
- static {
- NativeLibLoader.load();
- }
-
- public GraphicsConfiguration chooseGraphicsConfiguration(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser,
- GraphicsDevice device) {
- return null;
- }
-
- public GLDrawable getGLDrawable(Object target,
- GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- if (target == null) {
- throw new IllegalArgumentException("Null target");
- }
- if (!(target instanceof Component)) {
- throw new IllegalArgumentException("GLDrawables not supported for objects of type " +
- target.getClass().getName() + " (only Components are supported in this implementation)");
- }
- return new MacOSXOnscreenGLDrawable((Component) target, capabilities, chooser);
- }
-
- public GLDrawableImpl createOffscreenDrawable(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- return new MacOSXOffscreenGLDrawable(capabilities);
- }
-
- public boolean canCreateGLPbuffer(GLCapabilities capabilities,
- int initialWidth,
- int initialHeight) {
- return true;
- }
-
- public GLPbuffer createGLPbuffer(final GLCapabilities capabilities,
- final int initialWidth,
- final int initialHeight,
- final GLContext shareWith) {
- final List returnList = new ArrayList();
- Runnable r = new Runnable() {
- public void run() {
- MacOSXPbufferGLDrawable pbufferDrawable = new MacOSXPbufferGLDrawable(capabilities,
- initialWidth,
- initialHeight);
- GLPbufferImpl pbuffer = new GLPbufferImpl(pbufferDrawable, shareWith);
- returnList.add(pbuffer);
- }
- };
- maybeDoSingleThreadedWorkaround(r);
- return (GLPbuffer) returnList.get(0);
- }
-
- private void maybeDoSingleThreadedWorkaround(Runnable action) {
- if (SingleThreadedWorkaround.doWorkaround() && !EventQueue.isDispatchThread()) {
- try {
- EventQueue.invokeAndWait(action);
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (InterruptedException e) {
- throw new GLException(e);
- }
- } else {
- action.run();
- }
- }
-}
diff --git a/src/net/java/games/jogl/impl/windows/WindowsGLContextFactory.java b/src/net/java/games/jogl/impl/windows/WindowsGLContextFactory.java
deleted file mode 100644
index 112afd2e4..000000000
--- a/src/net/java/games/jogl/impl/windows/WindowsGLContextFactory.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package net.java.games.jogl.impl.windows;
-
-import java.awt.Component;
-import java.awt.EventQueue;
-import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsDevice;
-import java.awt.Rectangle;
-import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.ArrayList;
-import java.util.List;
-import net.java.games.jogl.*;
-import net.java.games.jogl.impl.*;
-
-public class WindowsGLContextFactory extends GLContextFactory {
- private static final boolean DEBUG = Debug.debug("WindowsGLContextFactory");
- private static final boolean VERBOSE = Debug.verbose();
-
- static {
- NativeLibLoader.load();
- }
-
- public WindowsGLContextFactory() {
- AccessController.doPrivileged( new PrivilegedAction() {
- public Object run() {
- // Test for whether we should enable the single-threaded
- // workaround for ATI cards. It appears that if we make any
- // OpenGL context current on more than one thread on ATI cards
- // on Windows then we see random failures like the inability
- // to create more OpenGL contexts, or having just the next
- // OpenGL SetPixelFormat operation fail with a GetNextError()
- // code of 0 (but subsequent ones on subsequently-created
- // windows succeed). These kinds of failures are obviously due
- // to bugs in ATI's OpenGL drivers. Through trial and error it
- // was found that specifying
- // -DJOGL_SINGLE_THREADED_WORKAROUND=true on the command line
- // caused these problems to completely disappear. Therefore at
- // least on Windows we try to enable the single-threaded
- // workaround before creating any OpenGL contexts. In the
- // future, if problems are encountered on other platforms and
- // -DJOGL_SINGLE_THREADED_WORKAROUND=true works around them,
- // we may want to implement a workaround like this on other
- // platforms.
-
- // The algorithm here is to try to find the system directory
- // (assuming it is on the same drive as TMPDIR, exposed
- // through the system property java.io.tmpdir) and see whether
- // a known file in the ATI drivers is present; if it is, we
- // enable the single-threaded workaround.
-
- // If any path down this code fails, we simply bail out -- we
- // don't go to great lengths to figure out if the ATI drivers
- // are present. We could add more checks here in the future if
- // these appear to be insufficient.
-
- String tmpDirProp = System.getProperty("java.io.tmpdir");
- if (tmpDirProp != null) {
- File file = new File(tmpDirProp);
- if (file.isAbsolute()) {
- File parent = null;
- do {
- parent = file.getParentFile();
- if (parent != null) {
- file = parent;
- }
- } while (parent != null);
- // Now the file contains just the drive letter
- file = new File(new File(new File(file, "windows"), "system32"), "atioglxx.dll");
- if (file.exists()) {
- SingleThreadedWorkaround.shouldDoWorkaround();
- }
- }
- }
-
- return( null );
- }
- });
- }
-
- public GraphicsConfiguration chooseGraphicsConfiguration(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser,
- GraphicsDevice device) {
- return null;
- }
-
- public GLDrawable getGLDrawable(Object target,
- GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- if (target == null) {
- throw new IllegalArgumentException("Null target");
- }
- if (!(target instanceof Component)) {
- throw new IllegalArgumentException("GLDrawables not supported for objects of type " +
- target.getClass().getName() + " (only Components are supported in this implementation)");
- }
- return new WindowsOnscreenGLDrawable((Component) target, capabilities, chooser);
- }
-
- public GLDrawableImpl createOffscreenDrawable(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- return new WindowsOffscreenGLDrawable(capabilities, chooser);
- }
-
- private boolean pbufferSupportInitialized = false;
- private boolean canCreateGLPbuffer = false;
- public boolean canCreateGLPbuffer(GLCapabilities capabilities,
- int initialWidth,
- int initialHeight) {
- if (!pbufferSupportInitialized) {
- Runnable r = new Runnable() {
- public void run() {
- WindowsDummyGLDrawable dummyDrawable = new WindowsDummyGLDrawable();
- GLContext dummyContext = dummyDrawable.createContext(null);
- if (dummyContext != null) {
- GLContext lastContext = GLContext.getCurrent();
- if (lastContext != null) {
- lastContext.release();
- }
- dummyContext.makeCurrent();
- GL dummyGL = dummyContext.getGL();
- canCreateGLPbuffer = dummyGL.isExtensionAvailable("GL_ARB_pbuffer");
- pbufferSupportInitialized = true;
- dummyContext.release();
- dummyContext.destroy();
- dummyDrawable.destroy();
- if (lastContext != null) {
- lastContext.makeCurrent();
- }
- }
- }
- };
- maybeDoSingleThreadedWorkaround(r);
- }
- return canCreateGLPbuffer;
- }
-
- public GLPbuffer createGLPbuffer(final GLCapabilities capabilities,
- final int initialWidth,
- final int initialHeight,
- final GLContext shareWith) {
- if (!canCreateGLPbuffer(capabilities, initialWidth, initialHeight)) {
- throw new GLException("Pbuffer support not available with current graphics card");
- }
- final List returnList = new ArrayList();
- Runnable r = new Runnable() {
- public void run() {
- WindowsDummyGLDrawable dummyDrawable = new WindowsDummyGLDrawable();
- GLContext dummyContext = dummyDrawable.createContext(null);
- GLContext lastContext = GLContext.getCurrent();
- if (lastContext != null) {
- lastContext.release();
- }
- dummyContext.makeCurrent();
- GL dummyGL = dummyContext.getGL();
- try {
- WindowsPbufferGLDrawable pbufferDrawable = new WindowsPbufferGLDrawable(capabilities,
- initialWidth,
- initialHeight,
- dummyDrawable,
- dummyGL);
- GLPbufferImpl pbuffer = new GLPbufferImpl(pbufferDrawable, shareWith);
- returnList.add(pbuffer);
- dummyContext.release();
- dummyContext.destroy();
- dummyDrawable.destroy();
- } finally {
- if (lastContext != null) {
- lastContext.makeCurrent();
- }
- }
- }
- };
- maybeDoSingleThreadedWorkaround(r);
- return (GLPbuffer) returnList.get(0);
- }
-
- static String wglGetLastError() {
- int err = WGL.GetLastError();
- String detail = null;
- switch (err) {
- case WGL.ERROR_INVALID_PIXEL_FORMAT: detail = "ERROR_INVALID_PIXEL_FORMAT"; break;
- case WGL.ERROR_NO_SYSTEM_RESOURCES: detail = "ERROR_NO_SYSTEM_RESOURCES"; break;
- case WGL.ERROR_INVALID_DATA: detail = "ERROR_INVALID_DATA"; break;
- case WGL.ERROR_PROC_NOT_FOUND: detail = "ERROR_PROC_NOT_FOUND"; break;
- case WGL.ERROR_INVALID_WINDOW_HANDLE:detail = "ERROR_INVALID_WINDOW_HANDLE"; break;
- default: detail = "(Unknown error code " + err + ")"; break;
- }
- return detail;
- }
-
- private void maybeDoSingleThreadedWorkaround(Runnable action) {
- if (SingleThreadedWorkaround.doWorkaround() && !EventQueue.isDispatchThread()) {
- try {
- EventQueue.invokeAndWait(action);
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (InterruptedException e) {
- throw new GLException(e);
- }
- } else {
- action.run();
- }
- }
-}
diff --git a/src/net/java/games/jogl/impl/windows/WindowsPbufferGLContext.java b/src/net/java/games/jogl/impl/windows/WindowsPbufferGLContext.java
index 80d6d2a02..c602cab99 100644
--- a/src/net/java/games/jogl/impl/windows/WindowsPbufferGLContext.java
+++ b/src/net/java/games/jogl/impl/windows/WindowsPbufferGLContext.java
@@ -157,6 +157,6 @@ public class WindowsPbufferGLContext extends WindowsGLContext {
}
private static String wglGetLastError() {
- return WindowsGLContextFactory.wglGetLastError();
+ return WindowsGLDrawableFactory.wglGetLastError();
}
}
diff --git a/src/net/java/games/jogl/impl/windows/WindowsPbufferGLDrawable.java b/src/net/java/games/jogl/impl/windows/WindowsPbufferGLDrawable.java
index d91feb27c..b6099286a 100644
--- a/src/net/java/games/jogl/impl/windows/WindowsPbufferGLDrawable.java
+++ b/src/net/java/games/jogl/impl/windows/WindowsPbufferGLDrawable.java
@@ -394,6 +394,6 @@ public class WindowsPbufferGLDrawable extends WindowsGLDrawable {
}
private static String wglGetLastError() {
- return WindowsGLContextFactory.wglGetLastError();
+ return WindowsGLDrawableFactory.wglGetLastError();
}
}
diff --git a/src/net/java/games/jogl/impl/x11/X11GLContext.java b/src/net/java/games/jogl/impl/x11/X11GLContext.java
index dd6448265..15c1c8733 100644
--- a/src/net/java/games/jogl/impl/x11/X11GLContext.java
+++ b/src/net/java/games/jogl/impl/x11/X11GLContext.java
@@ -260,7 +260,7 @@ public abstract class X11GLContext extends GLContextImpl {
public boolean isExtensionAvailable(String glExtensionName) {
if (glExtensionName.equals("GL_ARB_pbuffer") ||
glExtensionName.equals("GL_ARB_pixel_format")) {
- return X11GLContextFactory.getFactory().canCreateGLPbuffer(null, 0, 0);
+ return GLDrawableFactory.getFactory().canCreateGLPbuffer(null, 0, 0);
}
return super.isExtensionAvailable(glExtensionName);
}
@@ -296,10 +296,10 @@ public abstract class X11GLContext extends GLContextImpl {
// These synchronization primitives prevent the AWT from making
// requests from the X server asynchronously to this code.
protected void lockAWT() {
- X11GLContextFactory.lockAWT();
+ X11GLDrawableFactory.lockAWT();
}
protected void unlockAWT() {
- X11GLContextFactory.unlockAWT();
+ X11GLDrawableFactory.unlockAWT();
}
}
diff --git a/src/net/java/games/jogl/impl/x11/X11GLContextFactory.java b/src/net/java/games/jogl/impl/x11/X11GLContextFactory.java
deleted file mode 100644
index 109f74e44..000000000
--- a/src/net/java/games/jogl/impl/x11/X11GLContextFactory.java
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package net.java.games.jogl.impl.x11;
-
-import java.awt.Component;
-import java.awt.EventQueue;
-import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsDevice;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
-import net.java.games.jogl.*;
-import net.java.games.jogl.impl.*;
-
-public class X11GLContextFactory extends GLContextFactory {
- private static final boolean DEBUG = Debug.debug("X11GLContextFactory");
-
- static {
- NativeLibLoader.load();
- }
-
- private static final int MAX_ATTRIBS = 128;
-
- public GraphicsConfiguration chooseGraphicsConfiguration(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser,
- GraphicsDevice device) {
- int screen = X11SunJDKReflection.graphicsDeviceGetScreen(device);
- // Until we have a rock-solid visual selection algorithm written
- // in pure Java, we're going to provide the underlying window
- // system's selection to the chooser as a hint
-
- int[] attribs = glCapabilities2AttribList(capabilities, isMultisampleAvailable());
- XVisualInfo[] infos = null;
- GLCapabilities[] caps = null;
- int recommendedIndex = -1;
- lockAWT();
- try {
- long display = getDisplayConnection();
- XVisualInfo recommendedVis = GLX.glXChooseVisual(display, screen, attribs, 0);
- int[] count = new int[1];
- XVisualInfo template = new XVisualInfo();
- template.screen(screen);
- infos = GLX.XGetVisualInfo(display, GLX.VisualScreenMask, template, count, 0);
- if (infos == null) {
- throw new GLException("Error while enumerating available XVisualInfos");
- }
- caps = new GLCapabilities[infos.length];
- for (int i = 0; i < infos.length; i++) {
- caps[i] = xvi2GLCapabilities(display, infos[i]);
- // Attempt to find the visual chosen by glXChooseVisual
- if (recommendedVis != null && recommendedVis.visualid() == infos[i].visualid()) {
- recommendedIndex = i;
- }
- }
- } finally {
- unlockAWT();
- }
- int chosen = chooser.chooseCapabilities(capabilities, caps, recommendedIndex);
- if (chosen < 0 || chosen >= caps.length) {
- throw new GLException("GLCapabilitiesChooser specified invalid index (expected 0.." + (caps.length - 1) + ")");
- }
- XVisualInfo vis = infos[chosen];
- if (vis == null) {
- throw new GLException("GLCapabilitiesChooser chose an invalid visual");
- }
- // FIXME: need to look at glue code and see type of this field
- long visualID = vis.visualid();
- // FIXME: the storage for the infos array, as well as that for the
- // recommended visual, is leaked; should free them here with XFree()
-
- // Now figure out which GraphicsConfiguration corresponds to this
- // visual by matching the visual ID
- GraphicsConfiguration[] configs = device.getConfigurations();
- for (int i = 0; i < configs.length; i++) {
- GraphicsConfiguration config = configs[i];
- if (config != null) {
- if (X11SunJDKReflection.graphicsConfigurationGetVisualID(config) == visualID) {
- return config;
- }
- }
- }
-
- // Either we weren't able to reflectively introspect on the
- // X11GraphicsConfig or something went wrong in the steps above;
- // we're going to return null without signaling an error condition
- // in this case (although we should distinguish between the two
- // and possibly report more of an error in the latter case)
- return null;
- }
-
- public GLDrawable getGLDrawable(Object target,
- GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- if (target == null) {
- throw new IllegalArgumentException("Null target");
- }
- if (!(target instanceof Component)) {
- throw new IllegalArgumentException("GLDrawables not supported for objects of type " +
- target.getClass().getName() + " (only Components are supported in this implementation)");
- }
- return new X11OnscreenGLDrawable((Component) target);
- }
-
- public GLDrawableImpl createOffscreenDrawable(GLCapabilities capabilities,
- GLCapabilitiesChooser chooser) {
- return new X11OffscreenGLDrawable(capabilities, chooser);
- }
-
- private boolean pbufferSupportInitialized = false;
- private boolean canCreateGLPbuffer = false;
- public boolean canCreateGLPbuffer(GLCapabilities capabilities,
- int initialWidth,
- int initialHeight) {
- if (!pbufferSupportInitialized) {
- Runnable r = new Runnable() {
- public void run() {
- long display = getDisplayConnection();
- lockAWT();
- try {
- int[] major = new int[1];
- int[] minor = new int[1];
- if (!GLX.glXQueryVersion(display, major, 0, minor, 0)) {
- throw new GLException("glXQueryVersion failed");
- }
- if (DEBUG) {
- System.err.println("!!! GLX version: major " + major[0] +
- ", minor " + minor[0]);
- }
-
- int screen = 0; // FIXME: provide way to specify this?
-
- // Work around bugs in ATI's Linux drivers where they report they
- // only implement GLX version 1.2 but actually do support pbuffers
- if (major[0] == 1 && minor[0] == 2) {
- String str = GLX.glXQueryServerString(display, screen, GLX.GLX_VENDOR);
- if (str != null && str.indexOf("ATI") >= 0) {
- canCreateGLPbuffer = true;
- }
- } else {
- canCreateGLPbuffer = ((major[0] > 1) || (minor[0] > 2));
- }
-
- pbufferSupportInitialized = true;
- } finally {
- unlockAWT();
- }
- }
- };
- maybeDoSingleThreadedWorkaround(r);
- }
- return canCreateGLPbuffer;
- }
-
- public GLPbuffer createGLPbuffer(final GLCapabilities capabilities,
- final int initialWidth,
- final int initialHeight,
- final GLContext shareWith) {
- if (!canCreateGLPbuffer(capabilities, initialWidth, initialHeight)) {
- throw new GLException("Pbuffer support not available with current graphics card");
- }
- final List returnList = new ArrayList();
- Runnable r = new Runnable() {
- public void run() {
- X11PbufferGLDrawable pbufferDrawable = new X11PbufferGLDrawable(capabilities,
- initialWidth,
- initialHeight);
- GLPbufferImpl pbuffer = new GLPbufferImpl(pbufferDrawable, shareWith);
- returnList.add(pbuffer);
- }
- };
- maybeDoSingleThreadedWorkaround(r);
- return (GLPbuffer) returnList.get(0);
- }
-
- public static GLCapabilities xvi2GLCapabilities(long display, XVisualInfo info) {
- int[] tmp = new int[1];
- int val = glXGetConfig(display, info, GLX.GLX_USE_GL, tmp, 0);
- if (val == 0) {
- // Visual does not support OpenGL
- return null;
- }
- val = glXGetConfig(display, info, GLX.GLX_RGBA, tmp, 0);
- if (val == 0) {
- // Visual does not support RGBA
- return null;
- }
- GLCapabilities res = new GLCapabilities();
- res.setDoubleBuffered(glXGetConfig(display, info, GLX.GLX_DOUBLEBUFFER, tmp, 0) != 0);
- res.setStereo (glXGetConfig(display, info, GLX.GLX_STEREO, tmp, 0) != 0);
- // Note: use of hardware acceleration is determined by
- // glXCreateContext, not by the XVisualInfo. Optimistically claim
- // that all GLCapabilities have the capability to be hardware
- // accelerated.
- res.setHardwareAccelerated(true);
- res.setDepthBits (glXGetConfig(display, info, GLX.GLX_DEPTH_SIZE, tmp, 0));
- res.setStencilBits (glXGetConfig(display, info, GLX.GLX_STENCIL_SIZE, tmp, 0));
- res.setRedBits (glXGetConfig(display, info, GLX.GLX_RED_SIZE, tmp, 0));
- res.setGreenBits (glXGetConfig(display, info, GLX.GLX_GREEN_SIZE, tmp, 0));
- res.setBlueBits (glXGetConfig(display, info, GLX.GLX_BLUE_SIZE, tmp, 0));
- res.setAlphaBits (glXGetConfig(display, info, GLX.GLX_ALPHA_SIZE, tmp, 0));
- res.setAccumRedBits (glXGetConfig(display, info, GLX.GLX_ACCUM_RED_SIZE, tmp, 0));
- res.setAccumGreenBits(glXGetConfig(display, info, GLX.GLX_ACCUM_GREEN_SIZE, tmp, 0));
- res.setAccumBlueBits (glXGetConfig(display, info, GLX.GLX_ACCUM_BLUE_SIZE, tmp, 0));
- res.setAccumAlphaBits(glXGetConfig(display, info, GLX.GLX_ACCUM_ALPHA_SIZE, tmp, 0));
- if (isMultisampleAvailable()) {
- res.setSampleBuffers(glXGetConfig(display, info, GLX.GLX_SAMPLE_BUFFERS_ARB, tmp, 0) != 0);
- res.setNumSamples (glXGetConfig(display, info, GLX.GLX_SAMPLES_ARB, tmp, 0));
- }
- return res;
- }
-
- public static int[] glCapabilities2AttribList(GLCapabilities caps,
- boolean isMultisampleAvailable) {
- int colorDepth = (caps.getRedBits() +
- caps.getGreenBits() +
- caps.getBlueBits());
- if (colorDepth < 15) {
- throw new GLException("Bit depths < 15 (i.e., non-true-color) not supported");
- }
- int[] res = new int[MAX_ATTRIBS];
- int idx = 0;
- res[idx++] = GLX.GLX_RGBA;
- if (caps.getDoubleBuffered()) {
- res[idx++] = GLX.GLX_DOUBLEBUFFER;
- }
- if (caps.getStereo()) {
- res[idx++] = GLX.GLX_STEREO;
- }
- res[idx++] = GLX.GLX_RED_SIZE;
- res[idx++] = caps.getRedBits();
- res[idx++] = GLX.GLX_GREEN_SIZE;
- res[idx++] = caps.getGreenBits();
- res[idx++] = GLX.GLX_BLUE_SIZE;
- res[idx++] = caps.getBlueBits();
- res[idx++] = GLX.GLX_ALPHA_SIZE;
- res[idx++] = caps.getAlphaBits();
- res[idx++] = GLX.GLX_DEPTH_SIZE;
- res[idx++] = caps.getDepthBits();
- res[idx++] = GLX.GLX_STENCIL_SIZE;
- res[idx++] = caps.getStencilBits();
- res[idx++] = GLX.GLX_ACCUM_RED_SIZE;
- res[idx++] = caps.getAccumRedBits();
- res[idx++] = GLX.GLX_ACCUM_GREEN_SIZE;
- res[idx++] = caps.getAccumGreenBits();
- res[idx++] = GLX.GLX_ACCUM_BLUE_SIZE;
- res[idx++] = caps.getAccumBlueBits();
- if (isMultisampleAvailable && caps.getSampleBuffers()) {
- res[idx++] = GL.GLX_SAMPLE_BUFFERS_ARB;
- res[idx++] = GL.GL_TRUE;
- res[idx++] = GL.GLX_SAMPLES_ARB;
- res[idx++] = caps.getNumSamples();
- }
- res[idx++] = 0;
- return res;
- }
-
- // JAWT access
- private static JAWT jawt;
- public static JAWT getJAWT() {
- if (jawt == null) {
- JAWT j = new JAWT();
- j.version(JAWTFactory.JAWT_VERSION_1_4);
- if (!JAWTFactory.JAWT_GetAWT(j)) {
- throw new RuntimeException("Unable to initialize JAWT");
- }
- jawt = j;
- }
- return jawt;
- }
-
- public static void lockAWT() {
- getJAWT().Lock();
- }
-
- public static void unlockAWT() {
- getJAWT().Unlock();
- }
-
- // Display connection for use by visual selection algorithm and by all offscreen surfaces
- private static long staticDisplay;
- public static long getDisplayConnection() {
- if (staticDisplay == 0) {
- lockAWT();
- try {
- staticDisplay = GLX.XOpenDisplay(null);
- } finally {
- unlockAWT();
- }
- if (staticDisplay == 0) {
- throw new GLException("Unable to open default display, needed for visual selection and offscreen surface handling");
- }
- }
- return staticDisplay;
- }
-
- private static boolean checkedMultisample;
- private static boolean multisampleAvailable;
- public static boolean isMultisampleAvailable() {
- if (!checkedMultisample) {
- long display = getDisplayConnection();
- String exts = GLX.glXGetClientString(display, GLX.GLX_EXTENSIONS);
- if (exts != null) {
- multisampleAvailable = (exts.indexOf("GLX_ARB_multisample") >= 0);
- }
- checkedMultisample = true;
- }
- return multisampleAvailable;
- }
-
- private static String glXGetConfigErrorCode(int err) {
- switch (err) {
- case GLX.GLX_NO_EXTENSION: return "GLX_NO_EXTENSION";
- case GLX.GLX_BAD_SCREEN: return "GLX_BAD_SCREEN";
- case GLX.GLX_BAD_ATTRIBUTE: return "GLX_BAD_ATTRIBUTE";
- case GLX.GLX_BAD_VISUAL: return "GLX_BAD_VISUAL";
- default: return "Unknown error code " + err;
- }
- }
-
- public static int glXGetConfig(long display, XVisualInfo info, int attrib, int[] tmp, int tmp_offset) {
- if (display == 0) {
- throw new GLException("No display connection");
- }
- int res = GLX.glXGetConfig(display, info, attrib, tmp, tmp_offset);
- if (res != 0) {
- throw new GLException("glXGetConfig failed: error code " + glXGetConfigErrorCode(res));
- }
- return tmp[tmp_offset];
- }
-
- private void maybeDoSingleThreadedWorkaround(Runnable action) {
- if (SingleThreadedWorkaround.doWorkaround() && !EventQueue.isDispatchThread()) {
- try {
- EventQueue.invokeAndWait(action);
- } catch (InvocationTargetException e) {
- throw new GLException(e.getTargetException());
- } catch (InterruptedException e) {
- throw new GLException(e);
- }
- } else {
- action.run();
- }
- }
-}
diff --git a/src/net/java/games/jogl/impl/x11/X11GLDrawable.java b/src/net/java/games/jogl/impl/x11/X11GLDrawable.java
index 32098ab43..50394c3b4 100644
--- a/src/net/java/games/jogl/impl/x11/X11GLDrawable.java
+++ b/src/net/java/games/jogl/impl/x11/X11GLDrawable.java
@@ -134,7 +134,7 @@ public abstract class X11GLDrawable extends GLDrawableImpl {
}
caps = new GLCapabilities[infos.length];
for (int i = 0; i < infos.length; i++) {
- caps[i] = X11GLContextFactory.xvi2GLCapabilities(display, infos[i]);
+ caps[i] = X11GLDrawableFactory.xvi2GLCapabilities(display, infos[i]);
}
} finally {
unlockAWT();
@@ -163,10 +163,10 @@ public abstract class X11GLDrawable extends GLDrawableImpl {
// These synchronization primitives prevent the AWT from making
// requests from the X server asynchronously to this code.
protected void lockAWT() {
- X11GLContextFactory.lockAWT();
+ X11GLDrawableFactory.lockAWT();
}
protected void unlockAWT() {
- X11GLContextFactory.unlockAWT();
+ X11GLDrawableFactory.unlockAWT();
}
}
diff --git a/src/net/java/games/jogl/impl/x11/X11OffscreenGLDrawable.java b/src/net/java/games/jogl/impl/x11/X11OffscreenGLDrawable.java
index 7b60612df..021a4975e 100644
--- a/src/net/java/games/jogl/impl/x11/X11OffscreenGLDrawable.java
+++ b/src/net/java/games/jogl/impl/x11/X11OffscreenGLDrawable.java
@@ -76,7 +76,7 @@ public class X11OffscreenGLDrawable extends X11GLDrawable {
}
private void create() {
- display = X11GLContextFactory.getDisplayConnection();
+ display = X11GLDrawableFactory.getDisplayConnection();
XVisualInfo vis = chooseVisual(false);
int bitsPerPixel = vis.depth();
@@ -93,7 +93,7 @@ public class X11OffscreenGLDrawable extends X11GLDrawable {
pixmap = 0;
throw new GLException("glXCreateGLXPixmap failed");
}
- isDoubleBuffered = (X11GLContextFactory.glXGetConfig(display, vis, GLX.GLX_DOUBLEBUFFER, new int[1], 0) != 0);
+ isDoubleBuffered = (X11GLDrawableFactory.glXGetConfig(display, vis, GLX.GLX_DOUBLEBUFFER, new int[1], 0) != 0);
if (DEBUG) {
System.err.println("Created pixmap " + toHexString(pixmap) +
", GLXPixmap " + toHexString(drawable) +
diff --git a/src/net/java/games/jogl/impl/x11/X11OnscreenGLDrawable.java b/src/net/java/games/jogl/impl/x11/X11OnscreenGLDrawable.java
index 9b9705122..0b66c51a7 100644
--- a/src/net/java/games/jogl/impl/x11/X11OnscreenGLDrawable.java
+++ b/src/net/java/games/jogl/impl/x11/X11OnscreenGLDrawable.java
@@ -169,6 +169,6 @@ public class X11OnscreenGLDrawable extends X11GLDrawable {
//
private JAWT getJAWT() {
- return X11GLContextFactory.getJAWT();
+ return X11GLDrawableFactory.getJAWT();
}
}
diff --git a/src/net/java/games/jogl/impl/x11/X11PbufferGLDrawable.java b/src/net/java/games/jogl/impl/x11/X11PbufferGLDrawable.java
index 775bf649f..44c755384 100644
--- a/src/net/java/games/jogl/impl/x11/X11PbufferGLDrawable.java
+++ b/src/net/java/games/jogl/impl/x11/X11PbufferGLDrawable.java
@@ -70,7 +70,7 @@ public class X11PbufferGLDrawable extends X11GLDrawable {
(capabilities.getOffscreenFloatingPointBuffers() ? " [float]" : ""));
}
- createPbuffer(X11GLContextFactory.getDisplayConnection());
+ createPbuffer(X11GLDrawableFactory.getDisplayConnection());
}
public GLContext createContext(GLContext shareWith) {