summaryrefslogtreecommitdiffstats
path: root/src/classes/javax
diff options
context:
space:
mode:
authorKenneth Russel <[email protected]>2006-11-19 20:51:57 +0000
committerKenneth Russel <[email protected]>2006-11-19 20:51:57 +0000
commita303cd13ff62f94a0459978735620e37d72bbb77 (patch)
tree32b580af4e878d479890c12b8eae9c98e10a4874 /src/classes/javax
parentbf82eceb6f78d5ee6e4c0f9f02590d2a58e647d3 (diff)
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
Diffstat (limited to 'src/classes/javax')
-rw-r--r--src/classes/javax/media/opengl/GLCanvas.java7
-rw-r--r--src/classes/javax/media/opengl/GLDrawable.java10
-rw-r--r--src/classes/javax/media/opengl/GLJPanel.java17
3 files changed, 34 insertions, 0 deletions
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
//