diff --git a/src/jogl/classes/com/jogamp/opengl/GLRendererQuirks.java b/src/jogl/classes/com/jogamp/opengl/GLRendererQuirks.java index f81d2f2..2c29885 100644 --- a/src/jogl/classes/com/jogamp/opengl/GLRendererQuirks.java +++ b/src/jogl/classes/com/jogamp/opengl/GLRendererQuirks.java @@ -341,8 +341,24 @@ */ public static final int BuggyColorRenderbuffer = 18; + /** + * Some Intel drivers under Windows wrongly claims to support pbuffers + * with accumulation buffers. Then, the creation of a pbuffer fails: + * javax.media.opengl.GLException: pbuffer creation error: Couldn't find a suitable pixel format + *

+ * Appears on: + *

+ * + *

+ */ + public static final int NoPBufferWithAccum = 19; + /** Number of quirks known. */ - public static final int COUNT = 19; + public static final int COUNT = 20; private static final String[] _names = new String[] { "NoDoubleBufferedPBuffer", "NoDoubleBufferedBitmap", "NoSetSwapInterval", "NoOffscreenBitmap", "NoSetSwapIntervalPostRetarget", "GLSLBuggyDiscard", @@ -350,7 +366,7 @@ "NeedCurrCtx4ARBPixFmtQueries", "NeedCurrCtx4ARBCreateContext", "NoFullFBOSupport", "GLSLNonCompliant", "GL4NeedsGL3Request", "GLSharedContextBuggy", "GLES3ViaEGLES2Config", "SingletonEGLDisplayOnly", - "NoMultiSamplingBuffers", "BuggyColorRenderbuffer" + "NoMultiSamplingBuffers", "BuggyColorRenderbuffer", "NoPBufferWithAccum" }; private static final IdentityHashMap stickyDeviceQuirks = new IdentityHashMap(); diff --git a/src/jogl/classes/jogamp/opengl/GLContextImpl.java b/src/jogl/classes/jogamp/opengl/GLContextImpl.java index 01478a4..f1dee79 100644 --- a/src/jogl/classes/jogamp/opengl/GLContextImpl.java +++ b/src/jogl/classes/jogamp/opengl/GLContextImpl.java @@ -1841,6 +1841,13 @@ quirks.addQuirk( quirk ); } } + if (glVendor.equals("Intel") && glRenderer.equals("Intel Bear Lake B")) { + final int quirk = GLRendererQuirks.NoPBufferWithAccum; + if(DEBUG) { + System.err.println("Quirk: "+GLRendererQuirks.toString(quirk)+": cause: OS "+Platform.getOSType()+", [Vendor "+glVendor+" and Renderer "+glRenderer+"]"); + } + quirks.addQuirk( quirk ); + } } else if( Platform.OSType.ANDROID == Platform.getOSType() ) { // // ANDROID diff --git a/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLGraphicsConfiguration.java b/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLGraphicsConfiguration.java index 465b5f5..ee868b1 100644 --- a/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLGraphicsConfiguration.java +++ b/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLGraphicsConfiguration.java @@ -50,6 +50,7 @@ import com.jogamp.common.nio.Buffers; import com.jogamp.nativewindow.MutableGraphicsConfiguration; +import com.jogamp.opengl.GLRendererQuirks; import jogamp.nativewindow.windows.DWM_BLURBEHIND; import jogamp.nativewindow.windows.GDI; @@ -476,10 +477,10 @@ } iattributes.put(niattribs++, WGLExt.WGL_DEPTH_BITS_ARB); iattributes.put(niattribs++, caps.getDepthBits()); - if (caps.getAccumRedBits() > 0 || + if (!sharedResource.getRendererQuirks().exist(GLRendererQuirks.NoPBufferWithAccum) && (caps.getAccumRedBits() > 0 || caps.getAccumGreenBits() > 0 || caps.getAccumBlueBits() > 0 || - caps.getAccumAlphaBits() > 0) { + caps.getAccumAlphaBits() > 0)) { iattributes.put(niattribs++, WGLExt.WGL_ACCUM_BITS_ARB); iattributes.put(niattribs++, ( caps.getAccumRedBits() + caps.getAccumGreenBits() +