Using centralized quirk identifier enables us to locate code dealing w/ it and hence eases it's maintenance.
Some GL_VENDOR and GL_RENDERER strings are
listed here
| Modifier and Type | Field and Description |
|---|---|
| private int | |
| private static final String[] | |
| public static final int | BuggyColorRenderbuffer
Buggy FBO color renderbuffer target, i.e. driver may crash. |
| public static final int | DontCloseX11Display
Closing X11 displays may cause JVM crashes or X11 errors with some buggy drivers while being used in concert w/ OpenGL. |
| public static final int | GL4NeedsGL3Request
GL4 context needs to be requested via GL3 profile attribute
|
| public static final int | GLES3ViaEGLES2Config
Bug 925 - Accept an ES3 Context, if reported via GL-Version-String w/o |
| public static final int | GLFlushBeforeRelease
The OpenGL context needs a
|
| public static final int | GLNonCompliant
Non compliant GL context due to a buggy implementation not suitable for use. |
| public static final int | GLSharedContextBuggy
Buggy shared OpenGL context support within a multithreaded use-case, not suitable for stable usage. |
| public static final int | GLSLBuggyDiscard
GLSL |
| public static final int | GLSLNonCompliant
GLSL is not compliant or even not stable (crash)
|
| public static final int | NeedCurrCtx4ARBCreateContext
Need current GL context when calling new ARB CreateContext function, otherwise driver crashes the VM. |
| public static final int | NeedCurrCtx4ARBPixFmtQueries
Need current GL context when calling new ARB pixel format query functions, otherwise driver crashes the VM. |
| public static final int | NeedSharedObjectSync
Need GL objects (VBO, ..) to be synchronized when utilized concurrently from multiple threads via a shared GL context, otherwise driver crashes the VM. |
| public static final int | NoARBCreateContext
No reliable ARB_create_context implementation, even if driver claims otherwise. |
| public static final int | NoDoubleBufferedBitmap
On Windows no double buffered bitmaps are guaranteed to be available. |
| public static final int | NoDoubleBufferedPBuffer
Crashes XServer when using double buffered PBuffer with GL_RENDERER:
|
| public static final int | NoFullFBOSupport
No full FBO support, i.e. not compliant w/
|
| public static final int | NoMultiSamplingBuffers
No reliable MSAA / FSAA |
| public static final int | NoOffscreenBitmap
No offscreen bitmap available, currently true for JOGL's OSX implementation. |
| public static final int | NoPBufferWithAccum
No pbuffer supporting accumulation buffers available, even if driver claims otherwise. |
| public static final int | NoSetSwapInterval
Crashes application when trying to set EGL swap interval on Android 4.0.3 / Pandaboard ES / PowerVR SGX 540 |
| public static final int | NoSetSwapIntervalPostRetarget
SIGSEGV on setSwapInterval() after changing the context's drawable w/ 'Mesa 8.0.4' dri2SetSwapInterval/DRI2 (soft & intel) |
| public static final int | NoSurfacelessCtx
No support for ES or desktop GL >= 3.0 current context without surface, i.e. without a default framebuffer as read- and write drawables. |
| public static final int | SingletonEGLDisplayOnly
Bug 948 - NVIDIA 331.38 (Linux X11) EGL impl. |
| private static final IdentityHashMap |
| Access | Constructor and Description |
|---|---|
| public | |
| public | GLRendererQuirks(final int[]
an array of valid quirks quirks, final int offset in quirks array to start reading offset, final int number of quirks to read from offset within quirks array len)
|
| Modifier and Type | Method and Description |
|---|---|
| public final void | |
| public final void | addQuirks(final int[]
an array of valid quirks to be added quirks, final int offset in quirks array to start reading offset, final int number of quirks to read from offset within quirks array len)
|
| public final void | |
| public static void | addStickyDeviceQuirk(final AbstractGraphicsDevice device, final int quirk)
|
| public static void | addStickyDeviceQuirks(final AbstractGraphicsDevice device, final int[] quirks, final int offset, final int len)
|
| public static void | addStickyDeviceQuirks(final AbstractGraphicsDevice device, final GLRendererQuirks quirks)
|
| public static boolean | areSameStickyDevice(final AbstractGraphicsDevice device1, final AbstractGraphicsDevice device2)
Returns true if both devices have the same |
| public final boolean | |
| public static boolean | existStickyDeviceQuirk(final AbstractGraphicsDevice device, final int quirk)
|
| public static final int | |
| public static GLRendererQuirks | getStickyDeviceQuirks(final AbstractGraphicsDevice device)
Retrieval of sticky |
| public static void | pushStickyDeviceQuirks(final AbstractGraphicsDevice device, final GLRendererQuirks dest)
|
| public final StringBuilder | |
| public final String | |
| public static final String | Returns: the String equivalent of this quirkthe quirk to be converted to String quirk)
|
| public static void |
| _bitmask | back to summary |
|---|---|
| private int _bitmask | |
| _names | back to summary |
|---|---|
| private static final String[] _names | |
| BuggyColorRenderbuffer | back to summary |
|---|---|
| public static final int BuggyColorRenderbuffer Buggy FBO color renderbuffer target, i.e. driver may crash. Appears on:
Todo We have to determine the exact version range, i.e. not adding the quirk with fixed driver version! Note Also enables Note GLFBODrawable always uses texture attachments if set.
Quirk can also be enabled via property: | |
| DontCloseX11Display | back to summary |
|---|---|
| public static final int DontCloseX11Display Closing X11 displays may cause JVM crashes or X11 errors with some buggy drivers while being used in concert w/ OpenGL. Some drivers may require X11 displays to be closed in the same order as they were created, some may not allow them to be closed at all while resources are being used somehow. Drivers known exposing such bug:
See Bug 515 - https://jogamp.org/bugzilla/show_bug.cgi?id=515
and See Bug 705 - https://jogamp.org/bugzilla/show_bug.cgi?id=705 | |
| GL4NeedsGL3Request | back to summary |
|---|---|
| public static final int GL4NeedsGL3Request GL4 context needs to be requested via GL3 profile attribute
| |
| GLES3ViaEGLES2Config | back to summary |
|---|---|
| public static final int GLES3ViaEGLES2Config Bug 925 - Accept an ES3 Context, if reported via GL-Version-String w/o
The ES3 Context can be used via
The ES3 Context EGL.EGL_CONTEXT_CLIENT_VERSION, 2, ..
| |
| GLFlushBeforeRelease | back to summary |
|---|---|
| public static final int GLFlushBeforeRelease The OpenGL context needs a
| |
| GLNonCompliant | back to summary |
|---|---|
| public static final int GLNonCompliant Non compliant GL context due to a buggy implementation not suitable for use. Currently, Mesa >= 9.1.3 (may extend back as far as 9.0) OpenGL 3.1 compatibility context is not compliant. Most programs will give completely broken output (or no output at all. For now, this context is not trusted. The above has been confirmed for the following Mesa 9.* GL_RENDERER strings:
It still has to be verified whether the AMD OpenGL 3.1 core driver is compliant enought. | |
| GLSharedContextBuggy | back to summary |
|---|---|
| public static final int GLSharedContextBuggy Buggy shared OpenGL context support within a multithreaded use-case, not suitable for stable usage. X11 Mesa DRI Intel(R) driver >= 9.2.1 cannot handle multithreaded shared GLContext usage with non-blocking exclusive X11 display connections. References:
However, not all multithreaded use-cases are broken, e.g. our GLMediaPlayer does work. The above has been confirmed for the following Mesa 9.* strings:
On Android 4.*, Huawei's Ascend G615 w/ Immersion.16 could not make a shared context current, which uses a pbuffer drawable:
| |
| GLSLBuggyDiscard | back to summary |
|---|---|
| public static final int GLSLBuggyDiscard GLSL
Appears to have happened on Nvidia Tegra2, but seems to be fine now. | |
| GLSLNonCompliant | back to summary |
|---|---|
| public static final int GLSLNonCompliant GLSL is not compliant or even not stable (crash)
| |
| NeedCurrCtx4ARBCreateContext | back to summary |
|---|---|
| public static final int NeedCurrCtx4ARBCreateContext Need current GL context when calling new ARB CreateContext function, otherwise driver crashes the VM. Drivers known exposing such bug:
See Bug 706 - https://jogamp.org/bugzilla/show_bug.cgi?id=706 | |
| NeedCurrCtx4ARBPixFmtQueries | back to summary |
|---|---|
| public static final int NeedCurrCtx4ARBPixFmtQueries Need current GL context when calling new ARB pixel format query functions, otherwise driver crashes the VM. Drivers known exposing such bug:
See Bug 480 - https://jogamp.org/bugzilla/show_bug.cgi?id=480 | |
| NeedSharedObjectSync | back to summary |
|---|---|
| public static final int NeedSharedObjectSync Need GL objects (VBO, ..) to be synchronized when utilized concurrently from multiple threads via a shared GL context, otherwise driver crashes the VM.
Usually synchronization should not be required, if the shared GL objects
are created and immutable before concurrent usage.
Synchronization can be avoided if accessing the shared GL objects
exclusively via a queue or Appears on:
See Bug 1088 - https://jogamp.org/bugzilla/show_bug.cgi?id=1088 | |
| NoARBCreateContext | back to summary |
|---|---|
| public static final int NoARBCreateContext No reliable ARB_create_context implementation, even if driver claims otherwise. Some drivers wrongly claim to support ARB_create_context. However, the creation of such context fails: com.jogamp.opengl.GLException: AWT-EventQueue-0: WindowsWGLContex.createContextImpl ctx !ARB, profile > GL2 requested (OpenGL >= 3.0.1). Requested: GLProfile[GL3bc/GL3bc.hw], current: 2.1 (Compat profile, FBO, hardware) - 2.1.8787 Appears on:
| |
| NoDoubleBufferedBitmap | back to summary |
|---|---|
| public static final int NoDoubleBufferedBitmap On Windows no double buffered bitmaps are guaranteed to be available. | |
| NoDoubleBufferedPBuffer | back to summary |
|---|---|
| public static final int NoDoubleBufferedPBuffer Crashes XServer when using double buffered PBuffer with GL_RENDERER:
| |
| NoFullFBOSupport | back to summary |
|---|---|
| public static final int NoFullFBOSupport No full FBO support, i.e. not compliant w/
Also enabled via
Quirk can also be enabled via property: | |
| NoMultiSamplingBuffers | back to summary |
|---|---|
| public static final int NoMultiSamplingBuffers No reliable MSAA / FSAA Appears on:
Todo We have to determine the exact version range, i.e. not adding the quirk with fixed driver version! TODO: Since we currently don't handle this quirk internally, a user may need to do the following:
final AbstractGraphicsDevice adevice = GLDrawableFactory.getDesktopFactory(); // or similar
if( GLRendererQuirks.existStickyDeviceQuirk(adevice, GLRendererQuirks.NoMultiSamplingBuffers) ) {
// don't use MSAA
}
| |
| NoOffscreenBitmap | back to summary |
|---|---|
| public static final int NoOffscreenBitmap No offscreen bitmap available, currently true for JOGL's OSX implementation. | |
| NoPBufferWithAccum | back to summary |
|---|---|
| public static final int NoPBufferWithAccum No pbuffer supporting accumulation buffers available, even if driver claims otherwise. Some drivers wrongly claim to support pbuffers with accumulation buffers. However, the creation of such pbuffer fails: com.jogamp.opengl.GLException: pbuffer creation error: Couldn't find a suitable pixel format Appears on:
| |
| NoSetSwapInterval | back to summary |
|---|---|
| public static final int NoSetSwapInterval Crashes application when trying to set EGL swap interval on Android 4.0.3 / Pandaboard ES / PowerVR SGX 540 | |
| NoSetSwapIntervalPostRetarget | back to summary |
|---|---|
| public static final int NoSetSwapIntervalPostRetarget SIGSEGV on setSwapInterval() after changing the context's drawable w/ 'Mesa 8.0.4' dri2SetSwapInterval/DRI2 (soft & intel) | |
| NoSurfacelessCtx | back to summary |
|---|---|
| public static final int NoSurfacelessCtx No support for ES or desktop GL >= 3.0 current context without surface, i.e. without a default framebuffer as read- and write drawables.
See OpenGL spec 3.0, chapter 2.1 OpenGL Fundamentals, page 7 or It is possible to use a GL context without a default framebuffer, in which case a framebuffer object must be used to perform all rendering. This is useful for applications neeting to perform offscreen rendering. The feature will be attempted at initialization and this quirk will be set if failing. Known drivers failing the specification:
| |
| SingletonEGLDisplayOnly | back to summary |
|---|---|
| public static final int SingletonEGLDisplayOnly Bug 948 - NVIDIA 331.38 (Linux X11) EGL impl. only supports _one_ EGL Device via
Subsequent calls to Reusing global EGL display works. The quirk is autodetected within EGLDrawableFactory's initial default device setup! Appears on:
| |
| stickyDeviceQuirks | back to summary |
|---|---|
| private static final IdentityHashMap<String, GLRendererQuirks> stickyDeviceQuirks | |
| GLRendererQuirks | back to summary |
|---|---|
| public GLRendererQuirks() | |
| GLRendererQuirks | back to summary |
|---|---|
public GLRendererQuirks(final int[] quirks, final int offset, final int len) throws IllegalArgumentException
| |
| addQuirk | back to summary |
|---|---|
public final void addQuirk(final int quirk) throws IllegalArgumentException
| |
| addQuirks | back to summary |
|---|---|
public final void addQuirks(final int[] quirks, final int offset, final int len) throws IllegalArgumentException
| |
| addQuirks | back to summary |
|---|---|
public final void addQuirks(final GLRendererQuirks quirks)
| |
| addStickyDeviceQuirk | back to summary |
|---|---|
| public static void addStickyDeviceQuirk(final AbstractGraphicsDevice device, final int quirk) throws IllegalArgumentException
Not thread safe. | |
| addStickyDeviceQuirks | back to summary |
|---|---|
| public static void addStickyDeviceQuirks(final AbstractGraphicsDevice device, final int[] quirks, final int offset, final int len) throws IllegalArgumentException
Not thread safe. | |
| addStickyDeviceQuirks | back to summary |
|---|---|
| public static void addStickyDeviceQuirks(final AbstractGraphicsDevice device, final GLRendererQuirks quirks) throws IllegalArgumentException
Not thread safe. | |
| areSameStickyDevice | back to summary |
|---|---|
| public static boolean areSameStickyDevice(final AbstractGraphicsDevice device1, final AbstractGraphicsDevice device2) Returns true if both devices have the same | |
| exist | back to summary |
|---|---|
public final boolean exist(final int quirk) throws IllegalArgumentException
| |
| existStickyDeviceQuirk | back to summary |
|---|---|
| public static boolean existStickyDeviceQuirk(final AbstractGraphicsDevice device, final int quirk)
Not thread safe. However, use after changing the sticky quirks is safe. | |
| getCount | back to summary |
|---|---|
| public static final int getCount() Return the number of known quirks. | |
| getStickyDeviceQuirks | back to summary |
|---|---|
| public static GLRendererQuirks getStickyDeviceQuirks(final AbstractGraphicsDevice device) Retrieval of sticky
The Not thread safe. | |
| pushStickyDeviceQuirks | back to summary |
|---|---|
| public static void pushStickyDeviceQuirks(final AbstractGraphicsDevice device, final GLRendererQuirks dest)
Not thread safe. However, use after changing the sticky quirks is safe. | |
| toString | back to summary |
|---|---|
| public final StringBuilder toString(StringBuilder sb) | |
| toString | back to summary |
|---|---|
| public final String toString() Overrides java. Doc from java. Returns a string representation of the object. | |
| toString | back to summary |
|---|---|
public static final String toString(final int quirk) throws IllegalArgumentException
| |
| validateQuirk | back to summary |
|---|---|
public static void validateQuirk(final int quirk) throws IllegalArgumentException
| |