diff options
author | Kenneth Russel <kbrussel@alum.mit.edu> | 2006-03-28 00:56:44 +0000 |
---|---|---|
committer | Kenneth Russel <kbrussel@alum.mit.edu> | 2006-03-28 00:56:44 +0000 |
commit | d90cb8e2808e4f1109befaac9512a19629adea53 (patch) | |
tree | e8260c665e62775ca64098ef50f64dad76849c54 /src/classes/com/sun | |
parent | 4a63dd74a3678e47b37f40dd844b56e69f21aa12 (diff) |
Fixed lurking problem associated with on-screen contexts' makeCurrent
implementations on Windows and OS X where finally block should not
cover lockSurface call; also fixed problem pointed out by Matt Abraham
where if WindowsOnscreenGLDrawable.choosePixelFormat() threw an
exception it would cause subsequent lockSurface() calls to fail
git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/trunk@689 232f8b59-042b-4e1e-8c03-345bb8c30851
Diffstat (limited to 'src/classes/com/sun')
3 files changed, 9 insertions, 5 deletions
diff --git a/src/classes/com/sun/opengl/impl/macosx/MacOSXOnscreenGLContext.java b/src/classes/com/sun/opengl/impl/macosx/MacOSXOnscreenGLContext.java index 3f08b084e..9b60cd77a 100644 --- a/src/classes/com/sun/opengl/impl/macosx/MacOSXOnscreenGLContext.java +++ b/src/classes/com/sun/opengl/impl/macosx/MacOSXOnscreenGLContext.java @@ -54,9 +54,8 @@ public class MacOSXOnscreenGLContext extends MacOSXGLContext { } protected int makeCurrentImpl() throws GLException { - int lockRes = 0; + int lockRes = drawable.lockSurface(); try { - lockRes = drawable.lockSurface(); if (lockRes == MacOSXOnscreenGLDrawable.LOCK_SURFACE_NOT_READY) { return CONTEXT_NOT_CURRENT; } diff --git a/src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLContext.java b/src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLContext.java index 4f41cd8e1..e6a0d432f 100644 --- a/src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLContext.java +++ b/src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLContext.java @@ -54,9 +54,8 @@ public class WindowsOnscreenGLContext extends WindowsGLContext { } protected int makeCurrentImpl() throws GLException { - int lockRes = 0; + int lockRes = drawable.lockSurface(); try { - lockRes = drawable.lockSurface(); if (lockRes == WindowsOnscreenGLDrawable.LOCK_SURFACE_NOT_READY) { return CONTEXT_NOT_CURRENT; } diff --git a/src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLDrawable.java b/src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLDrawable.java index 08902b573..ee8393296 100644 --- a/src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLDrawable.java +++ b/src/classes/com/sun/opengl/impl/windows/WindowsOnscreenGLDrawable.java @@ -194,7 +194,13 @@ public class WindowsOnscreenGLDrawable extends WindowsGLDrawable { return LOCK_SURFACE_NOT_READY; } if (!pixelFormatChosen) { - choosePixelFormat(true); + try { + choosePixelFormat(true); + } catch (RuntimeException e) { + // Make it look like the lockSurface() call didn't succeed + unlockSurface(); + throw e; + } } if (PROFILING) { long endTime = System.currentTimeMillis(); |