summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
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;
}