summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2015-02-03 21:18:02 +0100
committerSven Gothel <[email protected]>2015-02-03 21:18:02 +0100
commit3317e7a427fbb81dd3d7daa8116c7d33166ed003 (patch)
tree0a9d544f833ea6512588789461bd5b87a044d4da /src
parentb88ae2698abe197e64c8ec8571933eaf3b7b740a (diff)
Bug 1068 - Fix issue w/ unifying Surfaceless probing (commit 2120be14c7525ef051d105f9bb02294f78d17d28)
Commit 2120be14c7525ef051d105f9bb02294f78d17d28 caused GLDrawableFactoryImpl.probeSurfacelessCtx(..) to be only called if appropriate, hence GLRendererQuirks.NoSurfacelessCtx was not set otherwise. This patch adds the required 'else' branch for the case GLDrawableFactoryImpl.probeSurfacelessCtx(..) is not called and issues GLDrawableFactoryImpl.setNoSurfacelessCtxQuirk(..). +++ Add Note to EGLDrawableFactory's shutdown: "sr.device.close() Issues eglTerminate(), which may cause SIGSEGV w/ NVIDIA 343.36 w/ TestGLProfile01NEWT" However keep this code enabled, since this seems to be a driver issue. +++
Diffstat (limited to 'src')
-rw-r--r--src/jogl/classes/jogamp/opengl/GLDrawableFactoryImpl.java39
-rw-r--r--src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java5
-rw-r--r--src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLDrawableFactory.java1
-rw-r--r--src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java1
4 files changed, 35 insertions, 11 deletions
diff --git a/src/jogl/classes/jogamp/opengl/GLDrawableFactoryImpl.java b/src/jogl/classes/jogamp/opengl/GLDrawableFactoryImpl.java
index 1fd5c5b47..b7f861e13 100644
--- a/src/jogl/classes/jogamp/opengl/GLDrawableFactoryImpl.java
+++ b/src/jogl/classes/jogamp/opengl/GLDrawableFactoryImpl.java
@@ -96,7 +96,7 @@ public abstract class GLDrawableFactoryImpl extends GLDrawableFactory {
* <p>
* Caller shall skip probing in case surfaceless support is not possible,
* e.g. OpenGL ES without {@code EGL_KHR_surfaceless_context} or EGL &lt; 1.5,
- * or desktop OpenGL context &lt; 3.0.
+ * or desktop OpenGL context &lt; 3.0 and instead call {@link #setNoSurfacelessCtxQuirk(GLContext)}!
* </p>
*
* @param context the context to probe, must be current
@@ -141,20 +141,39 @@ public abstract class GLDrawableFactoryImpl extends GLDrawableFactory {
}
}
if( !noSurfacelessCtxQuirk && !allowsSurfacelessCtx ) {
- final int quirk = GLRendererQuirks.NoSurfacelessCtx;
- if(DEBUG || GLContext.DEBUG) {
- System.err.println("Quirk: "+GLRendererQuirks.toString(quirk)+" -> "+device+": cause: probe");
- }
- final GLRendererQuirks glrq = context.getRendererQuirks();
- if( null != glrq ) {
- glrq.addQuirk(quirk);
- }
- GLRendererQuirks.addStickyDeviceQuirk(device, quirk);
+ setNoSurfacelessCtxQuirkImpl(device, context);
}
return allowsSurfacelessCtx;
}
/**
+ * Method will set the {@link GLRendererQuirks#NoSurfacelessCtx}
+ * if it has not been set already.
+ *
+ * @param context the context to probe, must be current
+ * @see GLRendererQuirks#NoSurfacelessCtx
+ */
+ protected final void setNoSurfacelessCtxQuirk(final GLContext context) {
+ final boolean noSurfacelessCtxQuirk = context.hasRendererQuirk(GLRendererQuirks.NoSurfacelessCtx);
+ if( !noSurfacelessCtxQuirk ) {
+ final GLDrawable origDrawable = context.getGLDrawable();
+ final AbstractGraphicsDevice device = origDrawable.getNativeSurface().getGraphicsConfiguration().getScreen().getDevice();
+ setNoSurfacelessCtxQuirkImpl(device, context);
+ }
+ }
+ private final void setNoSurfacelessCtxQuirkImpl(final AbstractGraphicsDevice device, final GLContext context) {
+ final int quirk = GLRendererQuirks.NoSurfacelessCtx;
+ if(DEBUG || GLContext.DEBUG) {
+ System.err.println("Quirk: "+GLRendererQuirks.toString(quirk)+" -> "+device+": cause: probe");
+ }
+ final GLRendererQuirks glrq = context.getRendererQuirks();
+ if( null != glrq ) {
+ glrq.addQuirk(quirk);
+ }
+ GLRendererQuirks.addStickyDeviceQuirk(device, quirk);
+ }
+
+ /**
* Returns the shared resource mapped to the <code>device</code> {@link AbstractGraphicsDevice#getConnection()},
* either a pre-existing or newly created, or <code>null</code> if creation failed or not supported.<br>
* Creation of the shared resource is tried only once.
diff --git a/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java b/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java
index 9c91bc788..8e2535309 100644
--- a/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java
+++ b/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java
@@ -745,6 +745,8 @@ public class EGLDrawableFactory extends GLDrawableFactoryImpl {
if( probeSurfacelessCtx(context, false /* restoreDrawable */) ) {
zeroDrawable = context.getGLDrawable();
}
+ } else {
+ setNoSurfacelessCtxQuirk(context);
}
rendererQuirks[0] = context.getRendererQuirks();
ctxProfile[0] = context.getContextOptions();
@@ -814,7 +816,8 @@ public class EGLDrawableFactory extends GLDrawableFactoryImpl {
}
if (null != sr.device) {
- // may cause JVM SIGSEGV:
+ // Issues eglTerminate(), which may cause SIGSEGV w/ NVIDIA 343.36 w/ TestGLProfile01NEWT
+ // May cause JVM SIGSEGV:
sr.device.close();
sr.device = null;
}
diff --git a/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLDrawableFactory.java b/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLDrawableFactory.java
index d65fa02bd..932c81f5d 100644
--- a/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLDrawableFactory.java
+++ b/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLDrawableFactory.java
@@ -356,6 +356,7 @@ public class WindowsWGLDrawableFactory extends GLDrawableFactoryImpl {
if( context.getGLVersionNumber().compareTo(GLContext.Version3_0) >= 0 ) {
allowsSurfacelessCtx = probeSurfacelessCtx(context, true /* restoreDrawable */);
} else {
+ setNoSurfacelessCtxQuirk(context);
allowsSurfacelessCtx = false;
}
hasARBPixelFormat = context.isExtensionAvailable(WGL_ARB_pixel_format);
diff --git a/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java b/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java
index 7c850549f..ecaf20d86 100644
--- a/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java
+++ b/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java
@@ -300,6 +300,7 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl {
if( contextIsCurrent && context.getGLVersionNumber().compareTo(GLContext.Version3_0) >= 0 ) {
allowsSurfacelessCtx = probeSurfacelessCtx(context, true /* restoreDrawable */);
} else {
+ setNoSurfacelessCtxQuirk(context);
allowsSurfacelessCtx = false;
}