aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenneth Russel <[email protected]>2006-05-28 23:40:58 +0000
committerKenneth Russel <[email protected]>2006-05-28 23:40:58 +0000
commit9c6946c4cf89fd91493a0c16160db5c84f48c614 (patch)
treea7a03d7ddbe649dbc8703161265917a53bf75c9e /src
parent833d0c87aeb985dcdb34367d6803ef2beae515b3 (diff)
Fixed Issue 224: External context dosen't work with GLCanvas
Added short-circuiting of logic to prevent the current GLContext from being released due to makeCurrent() of an external GLContext. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/trunk@784 232f8b59-042b-4e1e-8c03-345bb8c30851
Diffstat (limited to 'src')
-rw-r--r--src/classes/com/sun/opengl/impl/macosx/MacOSXExternalGLContext.java18
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/windows/WindowsExternalGLContext.java18
-rwxr-xr-xsrc/classes/com/sun/opengl/impl/x11/X11ExternalGLContext.java18
3 files changed, 54 insertions, 0 deletions
diff --git a/src/classes/com/sun/opengl/impl/macosx/MacOSXExternalGLContext.java b/src/classes/com/sun/opengl/impl/macosx/MacOSXExternalGLContext.java
index 7a0b53a98..ceda14f3b 100644
--- a/src/classes/com/sun/opengl/impl/macosx/MacOSXExternalGLContext.java
+++ b/src/classes/com/sun/opengl/impl/macosx/MacOSXExternalGLContext.java
@@ -45,6 +45,7 @@ import com.sun.opengl.impl.*;
public class MacOSXExternalGLContext extends MacOSXGLContext {
private boolean firstMakeCurrent = true;
private boolean created = true;
+ private GLContext lastContext;
public MacOSXExternalGLContext() {
super(null, null);
@@ -74,6 +75,23 @@ public class MacOSXExternalGLContext extends MacOSXGLContext {
return true;
}
+ public int makeCurrent() throws GLException {
+ // Save last context if necessary to allow external GLContexts to
+ // talk to other GLContexts created by this library
+ GLContext cur = getCurrent();
+ if (cur != null && cur != this) {
+ lastContext = cur;
+ setCurrent(null);
+ }
+ return super.makeCurrent();
+ }
+
+ public void release() throws GLException {
+ super.release();
+ setCurrent(lastContext);
+ lastContext = null;
+ }
+
protected int makeCurrentImpl() throws GLException {
if (firstMakeCurrent) {
firstMakeCurrent = false;
diff --git a/src/classes/com/sun/opengl/impl/windows/WindowsExternalGLContext.java b/src/classes/com/sun/opengl/impl/windows/WindowsExternalGLContext.java
index cd51f4eb1..a73cc7ac4 100755
--- a/src/classes/com/sun/opengl/impl/windows/WindowsExternalGLContext.java
+++ b/src/classes/com/sun/opengl/impl/windows/WindowsExternalGLContext.java
@@ -47,6 +47,7 @@ import com.sun.opengl.impl.*;
public class WindowsExternalGLContext extends WindowsGLContext {
private boolean firstMakeCurrent = true;
private boolean created = true;
+ private GLContext lastContext;
public WindowsExternalGLContext() {
super(null, null, true);
@@ -61,6 +62,23 @@ public class WindowsExternalGLContext extends WindowsGLContext {
resetGLFunctionAvailability();
}
+ public int makeCurrent() throws GLException {
+ // Save last context if necessary to allow external GLContexts to
+ // talk to other GLContexts created by this library
+ GLContext cur = getCurrent();
+ if (cur != null && cur != this) {
+ lastContext = cur;
+ setCurrent(null);
+ }
+ return super.makeCurrent();
+ }
+
+ public void release() throws GLException {
+ super.release();
+ setCurrent(lastContext);
+ lastContext = null;
+ }
+
protected int makeCurrentImpl() throws GLException {
if (firstMakeCurrent) {
firstMakeCurrent = false;
diff --git a/src/classes/com/sun/opengl/impl/x11/X11ExternalGLContext.java b/src/classes/com/sun/opengl/impl/x11/X11ExternalGLContext.java
index 80d9c6f1a..89b769eee 100755
--- a/src/classes/com/sun/opengl/impl/x11/X11ExternalGLContext.java
+++ b/src/classes/com/sun/opengl/impl/x11/X11ExternalGLContext.java
@@ -45,6 +45,7 @@ import com.sun.opengl.impl.*;
public class X11ExternalGLContext extends X11GLContext {
private boolean firstMakeCurrent = true;
private boolean created = true;
+ private GLContext lastContext;
public X11ExternalGLContext() {
super(null, null);
@@ -65,6 +66,23 @@ public class X11ExternalGLContext extends X11GLContext {
protected void create() {
}
+ public int makeCurrent() throws GLException {
+ // Save last context if necessary to allow external GLContexts to
+ // talk to other GLContexts created by this library
+ GLContext cur = getCurrent();
+ if (cur != null && cur != this) {
+ lastContext = cur;
+ setCurrent(null);
+ }
+ return super.makeCurrent();
+ }
+
+ public void release() throws GLException {
+ super.release();
+ setCurrent(lastContext);
+ lastContext = null;
+ }
+
protected int makeCurrentImpl() throws GLException {
mostRecentDisplay = drawable.getDisplay();
if (firstMakeCurrent) {