From a303cd13ff62f94a0459978735620e37d72bbb77 Mon Sep 17 00:00:00 2001 From: Kenneth Russel Date: Sun, 19 Nov 2006 20:51:57 +0000 Subject: Fixed Issue 213: Expose GLCaps from GLDrawable Added getChosenGLCapabilities() to the GLDrawable interface. Implemented on Windows, Unix and Mac OS X platforms with various techniques. Attempts to provide correct answers in all cases, even when the GLCapabilitiesChooser mechanism is not supported. Required addition of new platform-specific Java code in most cases to either re-convert existing PIXELFORMATDESCRIPTORS / XVisualInfos, or to query the pixel format or visual chosen for drawables like pbuffers for which the chooser mechanism is not (yet) implemented. Tested on Windows, Solaris/x86, and Mac OS X with on-screen, off-screen and pbuffer drawables. (Full support for the Java2D/JOGL bridge is not yet in place; the answer returned from the GLJPanel in this case is currently the default GLCapabilities, and it is likely that "external" GLDrawables will return null.) git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/trunk@989 232f8b59-042b-4e1e-8c03-345bb8c30851 --- src/classes/javax/media/opengl/GLCanvas.java | 7 +++++++ src/classes/javax/media/opengl/GLDrawable.java | 10 ++++++++++ src/classes/javax/media/opengl/GLJPanel.java | 17 +++++++++++++++++ 3 files changed, 34 insertions(+) (limited to 'src/classes/javax/media') diff --git a/src/classes/javax/media/opengl/GLCanvas.java b/src/classes/javax/media/opengl/GLCanvas.java index 83072ffc5..3848cca2c 100644 --- a/src/classes/javax/media/opengl/GLCanvas.java +++ b/src/classes/javax/media/opengl/GLCanvas.java @@ -245,6 +245,13 @@ public class GLCanvas extends Canvas implements GLAutoDrawable { maybeDoSingleThreadedWorkaround(swapBuffersOnEventDispatchThreadAction, swapBuffersAction); } + public GLCapabilities getChosenGLCapabilities() { + if (drawable == null) + return null; + + return drawable.getChosenGLCapabilities(); + } + //---------------------------------------------------------------------- // Internals only below this point // diff --git a/src/classes/javax/media/opengl/GLDrawable.java b/src/classes/javax/media/opengl/GLDrawable.java index 13b905167..6c0178474 100644 --- a/src/classes/javax/media/opengl/GLDrawable.java +++ b/src/classes/javax/media/opengl/GLDrawable.java @@ -119,4 +119,14 @@ public interface GLDrawable { is enabled (as is the default), this method is called automatically and should not be called by the end user. */ public void swapBuffers() throws GLException; + + /** Fetches the {@link GLCapabilities} corresponding to the chosen + OpenGL capabilities (pixel format / visual) for this drawable. + Some drawables, in particular on-screen drawables, may be + created lazily; null is returned if the drawable is not + currently created or if its pixel format has not been set yet. + On some platforms, the pixel format is not directly associated + with the drawable; a best attempt is made to return a reasonable + value in this case. */ + public GLCapabilities getChosenGLCapabilities(); } diff --git a/src/classes/javax/media/opengl/GLJPanel.java b/src/classes/javax/media/opengl/GLJPanel.java index e69c03c2f..3340c75d4 100644 --- a/src/classes/javax/media/opengl/GLJPanel.java +++ b/src/classes/javax/media/opengl/GLJPanel.java @@ -793,6 +793,23 @@ public class GLJPanel extends JPanel implements GLAutoDrawable { return oglPipelineEnabled; } + public GLCapabilities getChosenGLCapabilities() { + if (oglPipelineEnabled) { + // FIXME: should do better than this; is it possible to using only platform-independent code? + return new GLCapabilities(); + } + + if (hardwareAccelerationDisabled) { + if (offscreenDrawable != null) + return offscreenDrawable.getChosenGLCapabilities(); + } else { + if (pbuffer != null) + return pbuffer.getChosenGLCapabilities(); + } + + return null; + } + //---------------------------------------------------------------------- // Internals only below this point // -- cgit v1.2.3