- Better support for 'isOnBottom' on Windows - Refine 'SetWindowPos(..)' calls to handle isOn[Top|Bottom]
- Refine 'ShowWindow(..)' calls to handle isOnBottom
- Intercept WM_WINDOWPOSCHANGING to enforce isOn[Top|Bottom], i.e. change params (hwndInsertAfter and flags).
- Fullscreen on Bottom not working - While we change all flags appropriately (NOACTIVATE, ..) and don't issue CDS_FULLSCREEN is on bottom, Windows seems to enforce the window to be on top if it is sized to the screen maximum.
The extensions utilizes a negative interval value, enabling late swaps to occur without synchronization to the video frame.
Hence '-1' has new semantics, previously it was the 'default value' of 'untouched vsync interval'.
New default is: - 0 for unrealized context - 1 for realized context
+++
It requires [GLX|WGL]_EXT_swap_control, hence we shall ensure to use use this extension in the implementation of GLContext.setSwapInterval(..).
+++
Mesa3D seems to support GLX_SGI_swap_control only.
+++
Implemented on Windows and X11.
+++
On GNU/Linux using NVidia driver w/ my setup(*), sadly the query GLX.glXQueryDrawable(displayHandle, drawable.getHandle(), GLX.GLX_LATE_SWAPS_TEAR_EXT, val); always returns zero here, indicating async vsync is not supported.
(Queried the attribute for every frame in windowed or fullscreen mode)
Bug 1203 (Related): Only attempt to retrieve getGLIntVersion(..) if required
i.e. major >= 3 || hasGLVersionByString.compareTo(Version3_0) >= 0. Otherwise the 'VersionNumber hasGLVersionByInt' was never used -> reduce possible GL_ERRORs.
Since no known NVidia driver is know properly supporting surfaceless context, i.e. current context w/o drawable attached, we set quirk NoSurfacelessCtx for all NVidia drivers until a 'good one' is known!
Bug 1203: SharedResourceRunner.Implementation impl. shall use AbstractGraphicsDevice's uniqueID instead of connection
AbstractGraphicsDevice's uniqueID supports multiple device types and units while including the connection. This is required for proper EGLDrawableFactory's profile probing on different native platform devices.
Using common abstract implementation 'AImplementation' for WindowsWGL's, X11GLX's and EGL's DrawableFactory.
Bug 1203: GLDrawable-Stateless operations in GLContextImpl, using ctxVersion and ctxOptions
- State-less operation during profile probing (mapGLVersions). While probing the GLDrawable/GLProfile and GL instance may not reflect the currently probed OpenGL profile. Hence stateless operation by passing required information is required for: - GLDynamicLookupHelper must be fetched via 'major-version and contextOptions'. - GLContextImpl.resetProcAddress(..) - GLContextImpl.updateGLXProcAddressTable() - GLContextImpl.setGLFunctionAvailability(..) - ExtensionAvailabilityCache
TODO: Add replacement for GLProfile validation, which is disabled right now.: drawable.getGLProfile().verifyEquality(gl.getGLProfile())
The GLDrawable.GLProfile maybe less than GL's GLProfile due to current context-version and options. Hence we would need a 'GLProfile.bwCompatibleWith(GLProfile)'.
- add 'void remapAvailableGLVersions(final AbstractGraphicsDevice fromDevice, final AbstractGraphicsDevice toDevice)', allowing implementations to fully map one-devices profiles to another one avoiding a redundant profile mapping (probe operation).
- 'mapGLVersions(..)' - disable desktop-core profile mapping if GLProfile.disableOpenGLDesktop - disable desktop-desktop profile mapping if GLProfile.disableOpenGLDesktop
- EGLDrawableFactory - remove jogl.debug.EGLDrawableFactory.QueryNativeTK, since it shall not be used anymore.
- Use 'NativeWindowFactory.getDefaultDisplayConnection(..)' for default EGLGraphicsDevcie
- GLProfile - Add 'hasGL234OnEGLImpl' handling, i.e. GL* profiles on EGL devices
- Properly handle EGL's 'GLDynamicLookupHelper' queries for ES2, ES1 and GL* profiles, i.e. allow each one to fail seperately.
- Merge computed EGL-Profile-Map (1) and Desktop-Profile-Map (2) per device, instead of just using the last computation, preserving and favoratizing the Desktop-Profile-Map.
- GLContextImpl.mapGLVersions(..): Map ES* profiles if having an EGLGraphicsDevice and not disabled via GLProfile.disableOpenGLES.
- EGLContext - createContextARBImpl(..): Use the EGL_CONTEXT_MINOR_VERSION_KHR if supported
- GLContext* accessibility: Remove unused entries, add newly used ones
- EGLDrawableFactory - Fix a bug regarding detection of 'OpenGL' API for EGL
- SharedResource: Use detailed knowledge of each profile
- Only create one drawable and context for probing maximum, utilizing 'GLContextImpl.MappedGLVersionListener' to detect all mapped profiles for 'SharedResource' instance.
- Detect whether the probed/mapped device can be mapped to the default-EGL-device, i.e.: - current device is not the default-EGL-device - default-EGL-device is valid and could be mapped (beforehand) - same connection In this case, no probing/mapping is performed and the default-EGL-device mapped data being reused and remapped to the requested device.
- When mapping/probing, attempt to use a surfaceless context first, allowing same codepath for default-EGL-device and native-device (X11, ..). This avoids using pbuffer if using default-EGL-device and a dummy onscreen window if using a native-device (X11, ..). If this fails, continue as usual .. - default-EGL-device -> pbuffer - native-device (X11, ..) -> dummy onscreen window
Bug 1202 (related): Fix SEMVER regressions mostly due to Bug 1202 commits (adding dummy methods)
Commits deff49c901915e007f43a1df1a0d217a786e9f06 and 6ab634654f58afcf4549fcd1a796a0f9fd13298c changed/removed a few protected methods of public classes ..
Re-added dummy methods .. shall be removed for next 2.4.* version
Via GLDrawableFactory[Impl] the following details are considered while GLContextImpl.mapGLVersions(..): - hasOpenGLDesktopSupport If false, skip OpenGL Desktop queries
- hasOpenGLESSupport If false, skip OpenGL ES queries
- hasMajorMinorCreateContextARB If false, reduce [maxMajor.maxMinor..minMajor.minMinor] iteration, reducing to [maxMajor..minMajor], usually only one query.