Bugzilla – Attachment 283 Details for
Bug 519
GLPBuffer takes awtlock during painting
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
A patch that prevents a PBuffer from taking awtlocks during display
Patch_to_prevent_PBuffer_from_taking_awtlock_during_display_calls.patch (text/plain), 6.72 KB, created by
Daniel Balog
on 2011-10-17 09:27:06 CEST
(
hide
)
Description:
A patch that prevents a PBuffer from taking awtlocks during display
Filename:
MIME Type:
Creator:
Daniel Balog
Created:
2011-10-17 09:27:06 CEST
Size:
6.72 KB
patch
obsolete
>Index: ../../Applications/JOGLGIT/jogl/src/jogl/classes/jogamp/opengl/GLContextImpl.java >=================================================================== >--- ../../Applications/JOGLGIT/jogl/src/jogl/classes/jogamp/opengl/GLContextImpl.java (revision 913c6e25a6c6bea256f6c23943956563427cc1b4) >+++ ../../Applications/JOGLGIT/jogl/src/jogl/classes/jogamp/opengl/GLContextImpl.java (revision ) >@@ -105,6 +105,8 @@ > protected static final HashMap<String, ProcAddressTable> mappedGLProcAddress; > protected static final HashMap<String, ProcAddressTable> mappedGLXProcAddress; > >+ private boolean surfaceLocking = true; >+ > static { > mappedContextTypeObjectLock = new Object(); > mappedExtensionAvailabilityCache = new HashMap<String, ExtensionAvailabilityCache>(); >@@ -222,7 +224,15 @@ > } > lock.lock(); > } >- >+ >+ public boolean isSurfaceLocking() { >+ return surfaceLocking; >+ } >+ >+ public void setSurfaceLocking( boolean aSurfaceLocking ) { >+ surfaceLocking = aSurfaceLocking; >+ } >+ > public abstract Object getPlatformGLExtensions(); > > // Note: the surface is locked within [makeCurrent .. swap .. release] >@@ -432,7 +442,12 @@ > // Note: the surface is locked within [makeCurrent .. swap .. release] > protected final int makeCurrentLocking() throws GLException { > boolean exceptionOccurred = false; >- int lockRes = drawable.lockSurface(); >+ int lockRes = 0; >+ if ( surfaceLocking ) { >+ lockRes = drawable.lockSurface(); >+ }else{ >+ lockRes = NativeSurface.LOCK_SUCCESS; >+ } > try { > if (NativeSurface.LOCK_SURFACE_NOT_READY == lockRes) { > return CONTEXT_NOT_CURRENT; >@@ -469,10 +484,12 @@ > } > } finally { > if (exceptionOccurred) { >+ if ( surfaceLocking ) { >- drawable.unlockSurface(); >- } >- } >- } >+ drawable.unlockSurface(); >+ } >+ } >+ } >+ } > protected abstract void makeCurrentImpl(boolean newCreatedContext) throws GLException; > protected abstract boolean createImpl() throws GLException ; > >Index: ../../Applications/JOGLGIT/jogl/src/jogl/classes/jogamp/opengl/GLPbufferImpl.java >=================================================================== >--- ../../Applications/JOGLGIT/jogl/src/jogl/classes/jogamp/opengl/GLPbufferImpl.java (revision 913c6e25a6c6bea256f6c23943956563427cc1b4) >+++ ../../Applications/JOGLGIT/jogl/src/jogl/classes/jogamp/opengl/GLPbufferImpl.java (revision ) >@@ -83,6 +83,7 @@ > this.pbufferDrawable = pbufferDrawable; > context = (GLContextImpl) pbufferDrawable.createContext(parentContext); > context.setSynchronized(true); >+ context.setSurfaceLocking( false ); > } > > public GLContext createContext(GLContext shareWith) { >Index: ../../Applications/JOGLGIT/jogl/src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java >=================================================================== >--- ../../Applications/JOGLGIT/jogl/src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java (revision 913c6e25a6c6bea256f6c23943956563427cc1b4) >+++ ../../Applications/JOGLGIT/jogl/src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java (revision ) >@@ -37,15 +37,17 @@ > import jogamp.nativewindow.Debug; > import jogamp.nativewindow.NWJNILibLoader; > >-import javax.media.nativewindow.*; >- >+import javax.media.nativewindow.AbstractGraphicsDevice; >+import javax.media.nativewindow.NativeWindowException; >+import javax.media.nativewindow.NativeWindowFactory; >+import javax.media.nativewindow.ToolkitLock; >+import javax.media.nativewindow.util.Point; > import java.nio.Buffer; > import java.nio.IntBuffer; > import java.nio.ShortBuffer; > import java.security.AccessController; > import java.util.ArrayList; > import java.util.List; >-import javax.media.nativewindow.util.Point; > > /** > * Contains a thread safe X11 utility to retrieve display connections. >@@ -496,14 +498,18 @@ > } > } > >- public static int XSync(long display, boolean discard) { >+ public static int XSync( long display, boolean discard, boolean lock ) { >+ if ( lock ) { > lockDefaultToolkit(display); >+ } >- try { >+ try { > return X11Lib.XSync(display, discard); > } finally { >+ if ( lock ) { >- unlockDefaultToolkit(display); >+ unlockDefaultToolkit(display); > } >- } >+ } >+ } > > public static void XSynchronize(long display, boolean onoff) { > lockDefaultToolkit(display); >Index: ../../Applications/JOGLGIT/jogl/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXContext.java >=================================================================== >--- ../../Applications/JOGLGIT/jogl/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXContext.java (revision 913c6e25a6c6bea256f6c23943956563427cc1b4) >+++ ../../Applications/JOGLGIT/jogl/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXContext.java (revision ) >@@ -40,20 +40,29 @@ > > package jogamp.opengl.x11.glx; > >-import java.nio.*; >-import java.util.*; >- >-import javax.media.opengl.*; >-import javax.media.nativewindow.*; >-import javax.media.nativewindow.x11.X11GraphicsDevice; >- > import com.jogamp.common.nio.Buffers; > import com.jogamp.common.util.VersionNumber; >-import jogamp.opengl.*; > import com.jogamp.gluegen.runtime.ProcAddressTable; > import com.jogamp.gluegen.runtime.opengl.GLProcAddressResolver; > import jogamp.nativewindow.x11.X11Util; >+import jogamp.opengl.GLContextImpl; >+import jogamp.opengl.GLContextShareSet; >+import jogamp.opengl.GLDrawableFactoryImpl; >+import jogamp.opengl.GLDrawableImpl; > >+import javax.media.nativewindow.AbstractGraphicsConfiguration; >+import javax.media.nativewindow.AbstractGraphicsDevice; >+import javax.media.nativewindow.NativeSurface; >+import javax.media.nativewindow.x11.X11GraphicsDevice; >+import javax.media.opengl.GLCapabilitiesImmutable; >+import javax.media.opengl.GLContext; >+import javax.media.opengl.GLException; >+import javax.media.opengl.GLProfile; >+import java.nio.ByteBuffer; >+import java.nio.IntBuffer; >+import java.util.HashMap; >+import java.util.Map; >+ > public abstract class X11GLXContext extends GLContextImpl { > protected static final boolean TRACE_CONTEXT_CURRENT = false; // true; > >@@ -246,9 +255,9 @@ > try { > // critical path, a remote display might not support this command, > // hence we need to catch the X11 Error within this block. >- X11Util.XSync(display, false); >+ X11Util.XSync(display, false, isSurfaceLocking() ); > ctx = _glXExt.glXCreateContextAttribsARB(display, config.getFBConfig(), share, direct, attribs); >- X11Util.XSync(display, false); >+ X11Util.XSync(display, false, isSurfaceLocking() ); > } catch (RuntimeException re) { > if(DEBUG) { > Throwable t = new Throwable("Info: X11GLXContext.createContextARBImpl glXCreateContextAttribsARB failed with "+getGLVersion(major, minor, ctp, "@creation"), re);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 519
:
276
| 283