| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
This issue was introduced in commit 0a6a592c04a85d8124aa9d38b67f0caa1d739b75
and the '2nd choice branch' obviously never tested.
Thanks to Lathanda finding this issue on 6/14/20.
|
|
|
|
|
|
|
| |
query java.awt.EventQueue.isDispatchThread()
If AWT is not available, isAWTEventDispatchThread() returns false,
otherwise returns java.awt.EventQueue.isDispatchThread().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
on initial makeCurrent when offscreen
makeCurrent shall skip SetNSViewCmd for offscreen, i.e. refine criteria of nsViewChanged.
Previous term enforced SetNSViewCmd on initial call as lastNSViewDescr was null.
Expand first term to require an actual non null NSView.
contextMadeCurrent must avoid blocking to wait for completion of our SetNSViewCmd on AppKit.
AWT has procedures running on AppKit under certain situations,
where it issues a feedback flush on AWTEDT (from Appkit) blocking.
This in turn deadlocks our SetNSViewCmd waiting on the AppKit,
as we are blocking the AWTEDT waiting for same command.
Further avoiding other potential deadlocks, by adding a 500ms timeout.
Also clearing the lastSetNSViewCmd field post wait, regardless,
which avoid repeatitive SetNSViewCmd issuance on timeout.
Note that the SetNSViewCmd, we failed to wait for eventually gets executed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
makeCurrent() call
Command SetNSViewCmd sets NSOpenGLContext's NSView via [NSOpenGLContext setView:]
on the main-thread as enforced since XCode 11 using SDK macosx10.15, see Bug 1398.
This command is injected into OSX's main-thread @ NSOpenGLImpl.makeCurrent(long) only if required,
i.e. issued only for a newly bound NSView and skipped for surface-less or offscreen 'surfaces'.
This operation must be performed w/o blocking other tasks locking the NativeSurface on main-thread to complete.
Since [NSOpenGLContext setView:] acquires the CGLContext lock on the main-thread,
it can't be locked by the calling thread until this task has been completed.
Command issuer NSOpenGLImpl.makeCurrent(long) will not acquire the CGLContext lock if this command is pending.
contextMadeCurrent(true) cures the potential unlocked CGLContext by issuing
a whole GLContext.release() and GLContext.makeCurrent() cycle while waiting for this command to be completed in-between.
This GLContext cycle also ensures an unlocked NativeSurface.getLock() in-between,
allowing potentially blocked other tasks on the main-thread to complete and hence this queued command to execute.
Notable test provoking critical multithreading issues is com.jogamp.opengl.test.junit.jogl.demos.es2.newt.TestGearsES2NewtCanvasSWT.
Notable test exposing issues with an unlocked CGLContext is com.jogamp.opengl.test.junit.jogl.glsl.TestGLSLShaderState02NEWT.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
blocking
Set NSOpenGLContext's NSView via [NSOpenGLContext setView:]
on the main-thread as enforced since XCode 11 using SDL macosx10.15, using Runnable SetNSViewCmd.
This operation must be performed async w/o blocking to allow
other tasks locking the NativeSurface on main-thread to complete.
Further, since [NSOpenGLContext setView:] acquired the CGLContext lock,
it can't be locked until this task has been completed.
Worst case scenario for a late [NSOpenGLContext setView:] issuance
might be corrupt initial frame(s) displayed.
Since all concurrent locking is performed within JOGL,
the unlocked CGLContext window risk is only academic.
However, if native 3rd party toolkits take share control,
we might have a situation.
+++
SetNSViewCmd is issued @ makeCurrent() now as opposed to createContext(..)
and associateDrawable(true). The latter was actually late as well,
as it also happened after makeCurrent when updating the drawable
association. It also missed setting a null NSView when detached!
release() will also set a null NSView if called after associateDrawable(false).
SetNSViewCmd will only be issued if the NSView has been changed,
i.e. first makeCurrent() or changing the drawable.
If issued, makeCurrent() will not lock the underlying CGLContext
and hence allow SetNSViewCmd to perform - see above.
+++
NSViewDescriptor class structure replaces the less convenient method 'getNSViewHandle(..)',
exposing all collected drawable characteristics as fields.
NSViewDescriptor also respects a ProxySurface's OPT_UPSTREAM_SURFACELESS mode,
which results in not using any underlying NSView - similar to OPT_UPSTREAM_WINDOW_INVISIBLE.
This change ensures that all surfaceless GL operations will not use any NSView.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
lib lookup
New property 'jogl.ffmpeg.lib' may be set to 'internal',
setting PREFER_SYSTEM_LIBS:=false (default it true)
Non system internal libraries are named 'internal_<basename>',
e.g. 'internal_avutil'.
System default libraries are named '<basename>',
e.g. 'avutil'.
If PREFER_SYSTEM_LIBS is true (default),
we lookup the default library first,
then the versioned library names and last the internal library.
If PREFER_SYSTEM_LIBS is false,
we lookup the internal library first,
then the versioned library names and last the default library.
|
|
|
|
|
|
|
|
|
|
|
|
| |
its destroyedShares
Picking up Tom Nuydens suggestion to utilize a WeakIdentityHashMap instead of a IdentityHashMap,
allowing destroyed GLContext to be removed from the GLContextShareSet through the GC.
TestSharedContextVBOES2NEWT5 demonstrates the use-case, having one master context
and several slaves being spawn off, killed and new sets to be spawn off.
Here the GLContextShareSet shall not hard-reference the destroyed and user-unreferenced context,
but allowing the system to GC 'em.
|
|
|
|
|
|
|
|
|
| |
- refine some method names, eg
-- 'addNew' -> 'mapNewEntry'
-- 'hasCreatedSharedLeft(..)' -> 'hasCreatedSharesLeft(..)'
- add 'getCreatedShareCount(..)' and 'getDestroyedShareCount(..)'
- add 'getSize()' and 'printMap(..)'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
GLProfile.computeProfileImpl(..) as of Bug 1084 is not the culprit here and its hardware criteria filter works.
The issue is commit 99a064327bf991318841c858d21d13e55d6b39db of Bug 1203,
in particular the change in GLProfile re:
"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."
Here the Desktop-Profile-Map overwrites the EGL-Profile-Map and hence
the software mapping gets used.
Indeed, this is a regression cause by the work of Bug 1203.
+++
Resolution is to revert the explicit 'union mapping'
and rely on an enhanced 'GLContextImpl.remapAvailableGLVersions(fromDevice, toDevice)' function.
Here the EGLDrawableFactory _already_ maps the EGL device's GL Versions to the 'host' device (e.g. X11).
This has to be refined so that the remap will not overwrite the 'host' device's already detected GL Versions.
That alone is enough, so that GLProfile can simply use the 'mappedEGLProfiles' of the 'host' device if detected, which already is a merged mapping of X11 host- and EGL sub-device.
In case no 'mappedEGLProfiles' are available, we simply use the 'mappedDesktopProfiles'.
|
|
|
|
|
|
|
|
|
|
|
|
| |
GLBufferObjectTracker
As of the time of implementation, named immutable buffers were not fully supported within GL 4.4.
This has changed, i.e. GL 4.5 supports glNamedBufferStorage.
This patch adds support for the immutable named buffer storage case.
jogl commit 09fc7aa5539731bb0fba835caee61f6eb837ecff,
added GLBufferObjectTracker allowing to keep required references to NIO object.
This tracker complements the NIO buffer lifecycle with the GL semantics.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
available before using
commit f4281b5ee80d7674134bfee357695a98382884a3 for Bug 1156 (DRM/GBM)
introduced the call to 'eglGetPlatformDisplay(..)' for known EGL-platforms.
However, 'eglGetPlatformDisplay(..)' is only available for EGL versions >= 1.5
or 'eglGetPlatformDisplayEXT(..)' if EGL extension 'EGL_EXT_platform_base' is available.
This patch adds a singular EGL version probe and a secondary extension fallback test
at first call using EGL_NO_DISPLAY on both EGL_VERSION and EGL_EXTENSION eglQueryString(..) calls.
If 'eglGetPlatformDisplay*(..)' is not available, simply use 'eglGetDisplay(..)'.
This regression also impacted Bug 1417 (Android bringup using current SDK + NDK),
i.e. disabled most Android devices as their EGL version is often 1.4.
|
|
|
|
| |
CapabilitiesImmutable not being GLCapabilitiesImmutable
|
|
|
|
|
|
|
|
|
|
| |
TestShutdownCompleteNEWT revealed that EGLDrawableFactory won't be properly
re-created within subsequent GLProfile/GLDrawableFactory initSingleton()
after a GLProfile.shutdown() call.
Hence after the shutdown() call, subsequent GLProfile have no EGLDrawableFactory available and hence may not have a default device existent in case no desktop-factory is available.
Allow EGLDrawableFactory to be re-created after a shutdown().
|
|
|
|
|
|
|
|
|
|
| |
NVIDIA 440.36 using FBO
Tested with com.jogamp.opengl.test.junit.jogl.tile.TestTiledPrintingGearsNewtAWT,
which crashes in native makeCurrent of NV driver gl-core when using SurfacelessCtx.
Therefor we had to revert the commit 4fe9e1dfa67f4e5d614f48c02ad88e4cdd1ed415
enabling SurfacelessCtx with NV driver >= 430.40.
|
|
|
|
|
|
|
| |
initialization
Was within hasOpenGLDesktopSupport(), but then DesktopGL libs would have been already loaded and looked-up.
This is not necessary and only wastes resources and time.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Broadcom VC IV can be used from
both console and from inside X11
When used from inside X11
rendering is done on an DispmanX overlay surface
while keeping an X11 nativewindow under as input.
When Broadcom VC IV is guessed
only the Broadcom DispmanX EGL driver is loaded.
Therefore standard TYPE_X11 EGL can not be used.
|
|
|
|
|
|
|
| |
libbrcmWFC.so since 7 Jul 2016
Raspbian integration (two libGLES side-by-side)
https://github.com/anholt/mesa/issues/24
|
|
|
|
|
|
| |
Added this version as the safe version to limit GLRendererQuirks.NoSurfacelessCtx setting.
Bug 1200 - JOGL crashes on Debian8 GNU/Linux x86_64 'NVidia beta driver 355.06' @ probeSurfacelessCtx
|
|
|
|
|
|
| |
430.40 on GNU/Linux X11
Avoiding this method for now.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adding new classes DRMLib (gluegen of drm + gbm), DRMUtil and DRMMode GBMDummyUpstreamSurfaceHook
to new package jogamp.nativewindow.drm, allowing full awareness of DRM + GBM within NativeWindow for JOGL + NEWT.
DRMMode replaces the previous native code of collecting drmMode* attributes: active connector, used mode, encoder etc
and also supports multiple active connectors.
DRMUtil handles the global static drmFd (file descriptor), currently only the GNU/Linux DRM device is supported.
GBMDummyUpstreamSurfaceHook provides a simple dummy GBM surface.
NativeWindow provides the new nativewindow_drm.so and nativewindow-os-drm.jar,
which are included in most 'all' jar packages.
build property: setup.addNativeEGLGBM -> setup.addNativeDRMGBM
Changes NativeWindowFactory:
- TYPE_EGL_GBM -> TYPE_DRM_GBM while keeping the package ID of '.egl.gbm' for NEWT (using EGL)
- Initializing DRMUtil at initialization
Changes EGLDrawableFactory:
- Using native GBM device for the default EGL display creation instead of EGL_DEFAULT_DISPLAY.
This resolves issues as seen in Bug 1402, as well in cases w/o surfaceless support.
- GL profile mapping uses surfaceless when available for GBM,
otherwise uses createDummySurfaceImpl (dummy GBM surface via GBMDummyUpstreamSurfaceHook)
- createDummySurfaceImpl uses a dummy GBM surface via GBMDummyUpstreamSurfaceHook
- DesktopGL not available with GBM, see Bug 1401
NEWT's DRM + GBM + EGL Driver
- Using DRMLib, DRMUtil and DRMMode, removed most native code but WindowDriver swapBuffer
- ScreenDriver uses DRMMode, however currently only first connected CRT.
- WindowDriver aligns position and size to screen, positions other than 0/0 causes DRM failure
- WindowDriver reconfigure n/a
NEWT TODO:
- DRM Cursor support (mouse pointer)
- Pointer event handling
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- EGLSurface: Factor out 'eglCreate[Platform]WindowSurface'
NEWT egl.gbm.WindowDriver
-- Properly use GBM fourcc format and use as visualID
for GBM surface creation and EGL config selection
-- Create eglSurface within this class
-- Hook up GBM/DRM page flip (not working yet, no visible artifacts - no swap)
- ProxySurfaceImpl.surfaceSwap() call upstreamSurface's implementation if available
TODO: 'Permission denied' calling:
- drmSetMaster (optional)
- drmModeSetCrtc
- drmModePageFlip
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
according to Bug 1156
- Special files like '/dev/dri/card0' can't be tested via isFile(), use exists()
Order for GNU/Linux (and other unices) IMHO is
1) Display Server (Vendor neutral)
1.1) running X11 display server (DISPLAY check enough?)
1.2) running WAYLAND display server (WAYLAND_DISPLAY check enough?)
2) Console Mode Vendor Neutral
2.1) GBM (how to check?)
3) Console Mode Vendor Specific
3.1) VCIV (how to check)
|
|
|
|
| |
eglCreatePlatformWindowSurface as well (like eglGetPlatformDisplay)
|
|
|
|
| |
e674f4fa0e795bd67335025123f9af727d856f7d
|
|
|
|
|
|
|
|
|
| |
Using EGL-GBM, using desktop GL we end up with an unsatisfied linkage error after the ProcAddressTable
has been reset using the 'hasMajor' and 'hasCtxOptions'.
However looking up using 'reqMajor' and 'reqCtxOptions' seems to work.
Needs more analysis.
This change also increases robustness for scanning through GL profiles at initialization.
|
|
|
|
| |
Now: TYPE_EGL_GBM == ".egl.gbm"
|
|
|
|
|
|
| |
GBM driver is now under egl/gbm subpackage and has been replaced by bcm_vc_iv boilerplate.
Native code is reentrant capable and cleaned up.
TODO: EGLDisplayUtil work with SharedResourceRunner
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Culprit of the crash and the non propagated action on NSApp main-thread
was _simply_ our OSXUtil_KickNSApp() 'kick alive'
NSApplicationDefined NSEvent sent to the NSApp.
Java11's NSApp code overrides sendEvent and handles
NSApplicationDefined + subtype=ExecuteBlockEvent
using the given data1 as a function pointer. 8-O
ExecuteBlockEvent defined as 0, which we have sent.
Simply passing subtype=8888 avoids this side-effect.
Whether it is still required to KickNSApp() is another question.
+++
Further, make code a bit more robuts regarding the offscreenSurfaceLayer
at JAWTWindow invalidate. I.e. if still not detached, do the late cleanup there.
This just in case the OSX Context callback to disassociate the drawable
has been missed.
|
|
|
|
| |
RemovalCriteria as all Test definitions may be used for anything.
|
|
|
|
|
|
|
| |
X11GLXGraphicsConfiguration having a valid XVisualInfo
Therefor X11GLXGraphicsConfiguration::GLXFBConfig2GLCapabilities(..) also needs to clean the GLGraphicsConfigurationUtil.BITMAP_BIT
from drawableTypeBits and if all removed, drop the FBConfig.
|
|
|
|
|
|
|
|
|
| |
and No10BitColorCompOffscreen
Further enhance unit tests TestGLProfile03NEWTOffscreen,
i.e. test all meta profile types on all offscreen drawable types (fbo, pbuffer and bitmap).
Align unit test name numbers of TestGLProfile01NEWT to TestGLProfile03NEWTOffscreen.
|
|
|
|
| |
BuggyColorRenderbuffer enables NoFullFBOSupport
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
profile && has core profile
On Mesa, if requesting a 3.1 compat profile, we receive a 4.5 core profile.
This is natural due to constraints within glXCreateContextAttribsARB,
i.e. GLX_CONTEXT_PROFILE_MASK_ARB is only a available for versions >= 3.2
and these are not available on Mesa.
Tested with Mesa 18.3.6 of Debian 10 Buster,
which also confirms Bug 1385 fix of limitating GL3CompatNonCompliant
to Mesa < 18.2.0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
version/profile, also ..
also, if requested version is within GL3CompatNonCompliant valid range, i.e. < 3.1,
the detected actual version will be clipped for valid mapping to the requested data.
Here it might be essential to know, that all versions are being 'scanned'
via mapGLVersions from high to low.
Therefor Version 3.0 would be tried before 2.0
and both will be mapped to the clipped actual version 3.0.
The true actual version could be the maximum, however,
using the very same would lead to trying an invalid unavailable GLProfile.
|
|
|
|
|
|
|
| |
requested profile bit is set; Query GL_CONTEXT_PROFILE_MASK for hasCtxProfileBits
and finally guess the GL profile bit if none could be determined:
'isESReq ? GLContext.CTX_PROFILE_ES : GLContext.CTX_PROFILE_COMPAT'
|
|
|
|
|
|
| |
OpenGL version open, don't assume the profile
The profile should be queried at runtime like the version in these situations.
|
|
|
|
|
|
|
|
|
| |
variables and clip at 180 line width
This cleanup became necessary to re-analyse the code after quite some time.
Using clear immutable input input parameters for the requested OpenGL version+profile
and mutable current state 'has'.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Allow GLRendererQuirks to be overridden by user properties,
allowing to either force (inject) a quirk by a user property
or to ignore a quirk by a user property.
This helps:
- debugging certain quirk behavior (See Bug 1383)
- allowing a user to customize the quirk setting
+++
This patch also refines the quirk: GLNonCompliant -> GL3CompatNonCompliant,
i.e. constraints its semantics to GL3 compatible context.
+++
This patch also removed useless code of GLRendererQuirk,
i.e. the 'int[] quirk' array arguments which are nonsense
or wasteful, as we operate with bitmasks.
|
|
|
|
|
|
|
|
| |
We were reading a variety of surface type definitions from
sun.java2d.opengl.OGLUtilities using reflection, which has thrown
warnings since Java 9 and which soon will become illegal. For now, just
hard-coded these types to remove the warnings that happen during static
initialization. Eventually the entire Java2D class will have to be
revamped if we want to be able to actually use it.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Notable bug as mentioned before:
The FBO used and sharing the COLORBUFFER RENDERBUFFER
memory resources with CAEAGLLayer to be displayed in the UIView
seemingly cannot handle GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24
or GL_DEPTH_COMPONENT32 depth buffer - none at all (Device + Simulation).
This workaround re-binds the used color renderbuffer for EAGLLayer presentation
at the end of the FBO drawable instantiation.
FBO DEPTH buffer works now as demonstrated w/ GearsES2.
We have to issue one more test now, using a demo using an FBO itself.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Initial commit bba73bc096250a3c7fc036d84b1ea054d1b70b06 hacked
its path using a context global EGLLayer instance attachement.
The hack was good for the first demo, however, it forbid using
other FBObjects etc on the way.
Properly specifying FBObject.Attachment.StorageDefinition,
allowing the user to inject code for selected FBO attachements
to define their storage. This might be useful for different
platforms as well - however, it is OS agnostic and instance specific now.
In this sense, GLFBODrawableImpl, hosting FBObject,
has a more specific instance of FBObject.Attachment.StorageDefinition
for color-renderbuffer. It is passed along newly created color renderbuffer.
GLDrawableFactoryImpl.createGLDrawable uses a derived interface,
OnscreenFBOColorbufferStorageDefinition which is defined in
IOSEAGLDrawableFactory and return by its getter.
GLDrawableFactoryImpl.createGLDrawable is therefor platform agnostic again.
Bottom line is, as more platforms will be added, these semi-public interfaces
have to adapt to suit them all ..
All this due to iOS architecture for 'onscreen rendering' using a FBO
which shares its color renderbuffer storage with the EAGLLayer,
associated with the UIView. A bit weird maybe in first sight,
but efficient for creating cheap hardware design ;-)
Only criticism here is that Apple didn't bother using EGL and an extension.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
using our OpenJFK 9 x86_64 and arm64 build.
Test demo class is 'com.jogamp.opengl.demos.ios.Hello',
residing in the new demo folder 'src/demos/com/jogamp/opengl/demos/ios/Hello.java'.
This commit does not yet include a working NEWT
specialization for iOS, but it shall followup soon.
Instead this commit demonstrates JOGL operating on
native UIWindow, UIView and CAEAGLLayer as provided by
Nativewindow's IOSUtil.
Test Video https://www.youtube.com/watch?v=Z4lUQNFTGMI
+++
Notable bug: The FBO used and sharing the COLORBUFFER RENDERBUFFER
memory resources with CAEAGLLayer to be displayed in the UIView
seemingly cannot handle GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24
or GL_DEPTH_COMPONENT32 depth buffer - none at all (Device + Simulation).
Therefor the default demo GLEventListener chosen here
don't require a depth buffer ;-)
This issue can hopefully be mitigated with other means
than using a flat FBO sink similar to FBO multisampling.
|
| |
|
|
|
|
| |
for System related Operations
|
|
|
|
|
|
| |
GLBufferStateTracker needs to support ARB_indirect_parameters,
i.e. checkTargetName(target) and getQueryName(target)
need to recognize GL4.GL_PARAMETER_BUFFER_ARB.
|