From 597007fc23fbf86e036629b6c6b157e0e0506715 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sun, 28 Nov 2010 03:54:00 +0100 Subject: JOGL: Proper handling of Read Drawable Support (if not supported), add query. Read Drawable feature reflects the make context current API having a seperate read drawable next to the write drawable (default). glXMakeContextCurrent(write, read, ..) On X11 a ready drawable is only supported for GLX >= 1.3, on Windows only if extension WGL_ARB_make_current_read is available, on EGL it's always supported, on OSX not at all. API cleanup GLContext: changes: setGLDrawableRead(GLDrawable) -> setGLReadDrawable(GLDrawable) new: isGLReadDrawableAvailable() new: getGLExtensionsString(); Access qualifier cleanup. GLContextImpl: GLVersionNumber moved out. --- src/jogl/classes/javax/media/opengl/GLContext.java | 47 ++++++++++++++++------ 1 file changed, 35 insertions(+), 12 deletions(-) (limited to 'src/jogl/classes/javax') diff --git a/src/jogl/classes/javax/media/opengl/GLContext.java b/src/jogl/classes/javax/media/opengl/GLContext.java index 45e1361fb..f76f2b664 100644 --- a/src/jogl/classes/javax/media/opengl/GLContext.java +++ b/src/jogl/classes/javax/media/opengl/GLContext.java @@ -116,17 +116,32 @@ public abstract class GLContext { public abstract GLDrawable getGLDrawable(); /** - * Set the GLDrawable from which this context may be used to - * read.
- * If read is null, the default write drawable will be used. + * Return availability of GL read drawable. + * @return true if a GL read drawable is supported with your driver, otherwise false. */ - public abstract void setGLDrawableRead(GLDrawable read); + public abstract boolean isGLReadDrawableAvailable(); /** - * Returns the GLDrawable from which this context may be used to - * read. + * Set the read GLDrawable for read framebuffer operations.
+ * The caller should query if this feature is supported via {@link #isGLReadDrawableAvailable()}. + * + * @param read the read GLDrawable for read framebuffer operations. + * If null is passed, the default write drawable will be set. + * + * @throws GLException in case a read drawable is not supported + * and the given drawable is not null and not equal to the internal write drawable. + * + * @see #isGLReadDrawableAvailable() + * @see #getGLReadDrawable() */ - public abstract GLDrawable getGLDrawableRead(); + public abstract void setGLReadDrawable(GLDrawable read); + + /** + * Returns the read GLDrawable this context uses for read framebuffer operations. + * @see #isGLReadDrawableAvailable() + * @see #setGLReadDrawable(javax.media.opengl.GLDrawable) + */ + public abstract GLDrawable getGLReadDrawable(); /** * Makes this GLContext current on the calling thread. @@ -341,13 +356,13 @@ public abstract class GLContext { sb.append(toHexString(contextHandle)); sb.append(", "); sb.append(getGL()); - if(getGLDrawable()!=getGLDrawableRead()) { - sb.append(",\n\tDrawable Read : "); - sb.append(getGLDrawableRead()); - sb.append(",\n\tDrawable Write: "); + if(getGLDrawable()!=getGLReadDrawable()) { + sb.append(",\n\tRead Drawable : "); + sb.append(getGLReadDrawable()); + sb.append(",\n\tWrite Drawable: "); sb.append(getGLDrawable()); } else { - sb.append(",\n\tDrawable Read/Write: "); + sb.append(",\n\tDrawable: "); sb.append(getGLDrawable()); } return sb; @@ -359,6 +374,14 @@ public abstract class GLContext { current. */ public abstract String getPlatformExtensionsString(); + /** Returns a non-null (but possibly empty) string containing the + space-separated list of available extensions. + Can only be called while this context is current. + This is equivalent to + {@link javax.media.opengl.GL#glGetString(int) glGetString}({@link javax.media.opengl.GL#GL_EXTENSIONS GL_EXTENSIONS}) + */ + public abstract String getGLExtensionsString(); + public final int getGLVersionMajor() { return ctxMajorVersion; } public final int getGLVersionMinor() { return ctxMinorVersion; } public final boolean isGLCompatibilityProfile() { return ( 0 != ( CTX_PROFILE_COMPAT & ctxOptions ) ); } -- cgit v1.2.3