| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
| |
higher reported number of configs than buffer size
"I encountered a case on an NVidia Quadro 3500 fx where the call to
WGLExt.wglChoosePixelFormatARB in WindowsWGLGraphicsConfiguration (currently
line 355) returns 264 in numFormatsTmp despite 256 being passed in for the
maximum number of formats. This results in a buffer underflow on line 368 since
pformatsTmp only has 256 values and it's trying to copy 264 values."
Fixed in WindowsWGLGraphicsConfiguration and WindowsPbufferWGLDrawable.
|
|
|
|
| |
99a50b38f5650fedca0f207e03706ffa9492e50c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
mechanism
Due to a NEWT WindowClosing event regression cause by NewtCanvasAWT changes
a review of our WindowClosing event mechanism was required.
Important cleanups are marked w/ '(*)' below.
I would have preferred to change the 'WindowListener.windowDestroyNotify(WindowEvent)'
method to pass a WindowCloseEvent object exposing more information like
toolkit or programmatic destruction and passing whether a 'closing' or 'nop' action
will be performed based on the WindowClosingMode.
For now I postponed this idea .. since it would change the API again,
but may reconsider it after merging the Android 'closing' patch.
- InputEvent.consumedTag -> NEWTEvent.consumedTag
- Window
- (*) Promote setWindowDestroyNotifyAction(Runnable) to public,
former WindowImpl.setHandleDestroyNotify(boolean).
Using a Runnable action for WindowImpl.windowDestroyNotify(boolean)
allows a setting defined alternative for destroy() and gets rid
of [ab]using WindowListener.windowDestroyNotify(WindowEvent) for
lifecycle actions. Used in:
- GLWindow
- GLAutoDrawableDelegate impl.
- WindowImpl
- Respect NEWTEvent.consumedTag for WindowEvents as well
- (*) Impl. setHandleDestroyNotify(boolean) (see above)
- (*) destroy() simply sends out pre- and post- destruction Window events,
where windowDestroyNotify(boolean) sends out the pre-destruction event if NOP.
- (*) windowDestroyNotify(boolean) is public now, allowing other impl. details
to follow proper destruction using handleDestroyNotify Runnable (-> NewtCanvasAWT).
- AWTWindowClosingProtocol:
- addClosingListenerOneShot() -> addClosingListener()
- calling addClosingListener() at addNotify()
- calling removeClosingListener() at removeNotify()
- AWTWindowClosingProtocol ctor taking NOP runnable,
allowing to send WindowEvent.EVENT_WINDOW_DESTROY_NOTIFY at WindowClosingMode.DO_NOTHING_ON_CLOSE
- add/remove listener on AWT-EDT
- AWTWindowAdapter
- Add 'removeWindowClosingFrom(..)',
allowing to remove window closing event fwd.
- Also fwd windowClosed in window closing fwd'ing.
- NewtCanvasAWT
- (*) Utilize AWTWindowClosingProtocol NOP runnable (see above)
to fwd closing-NOP event to NEWT
- (*) Unify remove/destroy code in destroyImpl(..)
- !removeNotify -> destroy NEWT child programatic or as toolkit event
- removeNotify || windowClosing -> destroy jawtWindow
- (*) Remove AWTWindowAdapter/AWTParentWindowAdapter's windowClosingListener,
since we utilize AWTWindowClosingProtocol
- DisplayImpl
- Adding 'final void dispatchMessage(final NEWTEvent event)'
allowing to remove the NEWTEventTask wrapping for no reason
in enqueueEvent(..) if on EDT and waiting.
|
|
|
|
|
|
|
|
|
|
|
| |
As suggested @ http://forum.jogamp.org/How-to-force-core-profile-tp4028307.html
However, one could always get a dedicated core profile via:
- GLProfile.get(GLProfile.GLES2)
- GLProfile.get(GLProfile.GL3)
- GLProfile.get(GLProfile.GL4)
.. etc
|
|
|
|
| |
GPU) to GLRendererQuirks and perform only if exists.
|
|
|
|
|
|
|
|
| |
testing major < 3 versions. (Bug 679)
On OSX, we 'only' support the ctx ARB creation and hence have no !ARM fallback.
If querying a version [2.0 .. 3.0] for GL2, it is acceptable if a valid OpenGL version is lower, e.g. 1.4.
|
|
|
|
| |
valid!
|
|
|
|
| |
ARB ctx of expected version ?)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
where our CALayer is moved out of the visible area
- same erroneous behavior for GLCanvas and NewtCanvasAWT
- sized-frame: Set framesize and validate() it
- sized-component: Set component preferred size and call frame.pack()
- added workaround 'OffscreenLayerSurface.layoutSurfaceLayer()' to fix CALayer size, which snaps for:
- OK initial size before setVisible: sized-frame and sized-component
- OK resize w/ sized-frame
- OK manual frame resize
- Invisible: w/ sized-component after setVisible()
++
- CALayer-Sublayer (GL) has additional retain/release when added/removed
to be on safe side.
|
|
|
|
|
| |
If !visible, GLCanvas and GLJPanel's paint* and display method shall not render
as the other GLAutoDrawable impl. do (GLWindow, SWT GLCanvas).
|
|
|
|
| |
> GL2 (OpenGL >= 3.0.1) was requested.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
main-thread deadlock'ed due to locked shared context
NSOpenGLLayer::openGLContextForPixelFormat(..) is performed on main-thread at 1st NSOpenGLLayer display method.
This happened irregulary, i.e. sometimes (T0) right after NSOpenGLLayer creation and attachSurfaceLayer()/AddCASublayer(..),
sometimes later (T1).
NSOpenGLLayer::openGLContextForPixelFormat(..) uses the passed shared user context.
The shared user context is locked at NSOpenGLLayer's creation (T0) and if performed at this early time
the call deadlocks due to pthread_mutex wait for the shared user context.
This fix performs NSOpenGLLayer creation and layer attachment while the shared user context
is kept unlocked and enforces NSOpenGLLayer display and hence NSOpenGLLayer::openGLContextForPixelFormat(..).
Added CGL.setNSOpenGLLayerEnabled(..) to enable/disable NSOpenGLLayer - currently not used.
- Passed AddRemove tests for GLCanvas/Swing and GLWindow/NewtCanvasAWT w/ 100 loops on Java6 and Java7 on OSX.
- Passed Instruments Leaks test w/ 10 loops on Java6 and Java7
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Don't issue removeNotify(), delete drawable and context only!
- Fix Bug 675: NPE w/ Beans.setDesignTime(true)
- Carefully consider Beans.isDesginTime() fixes NPE - added unit test
- Fix GLCanvas.destroy(): Don't issue removeNotify(), delete drawable and context only!
- AWT removeNotify() shall only be issued via AWT itself, not manually
- Add 'destroyImpl(boolean destroyJAWTWindowAndAWTDevice)' to be called by
- GLCanvas.destroy(): destroyImpl( false );
- GLCanvas.removeNotify(): destroyImpl( true );
- Ensures JAWTWindow and AWTDevice are created and destroyed via the AWT callbacks
addNotify() and removeNotify() only.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
'CGL.releaseNSOpenGLLayer' triggers release - but very late w/ AWT usage.
OSXUtil_RemoveCASublayer0's added '[subLayer release]' in commit f6e6fab2a7ddfb5c9b614cb072c27ff697629161
is wrong, since 'CGL.releaseNSOpenGLLayer' actually does trigger it's release.
This was not seen w/ AWT tests, since it happens very later.
A NewtCanvasAWT test disclosed this error -> removed that extra release call.
The culprit for the late release w/ AWT usage was CGL.createNSOpenGLLayer's call in the current thread.
Moving it to the Main-Thread fixed the problem.
All CALayer lifecycle calls are issued on the Main-Thread now.
NSOpenGLLayer's CVDisplayLink OpenGL fitting via 'CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext'
is now performed at it's context creation in 'NSOpenGLLayer::openGLContextForPixelFormat'.
The 'extra' release of the NSOpenGLLayer's NSOpenGLContext as introduced in commit f6e6fab2a7ddfb5c9b614cb072c27ff697629161
is still valid.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Layers and native GL-Context are _not_ Released ; Java Side wait for Main-Thread
- Fix Bug 690: Occasional Freeze on CVDisplayLinkStop
- NSOpenGLLayer.disableAnimation() shall not claim the renderLock mutex,
since the CVDisplayLink callback could be waiting for the lock.
This waiting callback could freeze the call to CVDisplayLinkStop.
- Fix Bug 691: Layers and native GL-Context are _not_ Released
- Following proper release cycle:
Context unrealized:
- JAWTWindow.detachSurfaceLayer() -> OSXUtil.RemoveCASublayer(..)
- CGL.releaseNSOpenGLLayer(..)
JAWTWindow.destroy()
- MacOSXJAWTWindow.UnsetJAWTRootSurfaceLayer(..)
- OSXUtil.DestroyCALayer(..)
- 'Magic' CALayer release calls (w/o manual retain beforehand) at:
- OSXUtil.RemoveCASublayer(..): [subLayer release]
- MacOSXJAWTWindow.UnsetJAWTRootSurfaceLayer(..): [rootLayer release]
- OSXUtil.DestroyCALayer(..): [rootLayer release]
- 'Magic' NSOpenGLLayer's NSOpenGLContext dealloc:
- [NSOpenGLContext clearDrawable]
- CGLDestroyContext( [NSOpenGLContext CGLContextObj] )
- Java Side wait for Main-Thread
- Waiting for the delegated Main-Thread on the Java side eases debugging
and won't block the Main-Thread in native code.
- Utilizing this for all CALayer calls
Test case: TestGLCanvasAddRemove01SwingAWT
|
|
|
|
|
|
|
|
| |
threading and resource usage
- Still excluse OSX
- Respect sun.java2d.opengl property
- [Prepare] Allowing OGLPipeline thread usage w/o it's OGL resource usage
|
| |
|
|
|
|
| |
pausedIssued); Update TestGLWindows02NEWTAnimated (isPaused())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
EGL/ES2 tests, attempt to fix wrapped EGL case
- Bug 665 (part 2) was commit 7fd5f76e1eb4bbf93fe9b1171744bd755d8f96e4
- Add EGL/ES2 tests in
- TestGLContextDrawableSwitch01NEWT
- TestGLContextDrawableSwitch11NEWT
- Attempt to fix wrapped EGL case (incomplete)
- Using EGL/ES w/ non native EGL device/surface, but natively wrapped instances (most of the cases),
a 'complicated' delegation of
Native-Upstream -> EGL-Proxy -> EGL-Instance
is being used heavily relying on the objects lifecycle.
GLEventListenerState tries to roll back the realized state
and even sets the upstream device handle,
but this doesn't seem to be sufficient on X11.
Discussion:
It might turn out that we only can implement the survival of GLContext
and it's display device reliable w/ EGL within the GLAutoDrawable implementation,
which can hold the previous not destructed instances.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
FPSAnimator behavior), resume after add ifPaused()
- GLAnimatorControl: Refine API doc
- Animator.run():
- if( drawablesEmpt) { pausedIssued = true; } - Same behavior as FPSAnimator
- AnimatorBase.add(..)
- consider paused case if no drawablesEmpty, i.e. if ( isPaused() ) { resume(); }
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
requirement in GL[Offscreen]AutoDrawableDelegate*
Compatible w/ 'before'.
TODO: Contemplate about GLDrawableFactory.createOffscreenAutoDrawable(..) whether it:
- should better return an unrealized [auto]drawable
- or adding another API method for such case
Goal: Allow passing vector of [device/context/..] for use cases
such as re-using an onscreen destructed surface and on-/offscreen hopping.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Don't cache 'displayHandle'
- ProxySurface: Add 'NativeSurface getUpstreamSurface()' allowing querying direct access of a backing surface representing this instance.
- Use case: EGLWrappedSurface
- Default impl. returns null
- ProxySurfaceImpl: Don't cache 'displayHandle'
- getDisplayHandle() is 'final', no more 'shortcut' code allowed
due to re-association incl. display handle.
- See commit b738983638703bb721ee4c9820c8ef43e2252e73
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
application handling verbosity and debug output
The following cases were dumping states on stderr:
- FBOObject.isStatusValid() if false
-> Only dumps if DEBUG
- GLFBODrawableImpl.reset() if fboResetQuirk becomes true and 1st time in ClassLoader
-> Only dumps if DEBUG
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Changes allowing re-association (incl. null) of GLContext/GLDrawable:
- GLAutoDrawable: Refine API doc 'setContext(..)'
- GLContext: Refine API doc: 'setGLDrawable(..)' 'getGLDrawable()'
- GLContextImpl.setGLDrawable(): Handle null drawable
- GLAutoDrawableDelegate/GLAutoDrawableBase: Allow null GLContext
- GLDrawableHelper.switchContext(..)/recreateGLDrawable(): Balance GLContext.setGLDrawable(..) calls
- New GLEventListenerState, holding state vector [GLEventListener, GLContext, .. ]
impl. relocation of all components from/to GLAutoDrawable.
- GLDrawableUtil
- Using GLEventListenerState for swapGLContextAndAllGLEventListener(..)
+++
NEWT Window*:
- getDisplayHandle() is 'final', no more 'shortcut' code allowed
due to re-association incl. display handle.
- close*:
- close config's device (was missing)
- null config
+++
Changes allowing reconfig of Display handle as required
to re-associate pre-existing GLContext to a 'window':
- AbstractGraphicsDevice: Add isHandleOwner() / clearHandleOwner()
- Impl. in X11GraphicsDevice and EGLGraphicsDevice, NOP in DefaultGraphicsDevice
- DefaultGraphicsConfiguration add 'setScreen(..)'
- MutableGraphicsConfiguration
- Make DefaultGraphicsConfiguration.setScreen(..) public
- NativeWindowFactory add 'createScreen(String type, AbstractGraphicsDevice device, int screen)'
- Refactored from SWTAccessor
- NativeWindow x11ErrorHandler: Dump Stack Trace in DEBUG mode, always.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RGB565; Fix HiSilicon/Vivante/Immersion.16 EGLConfig selection (zero depth buffer @ visualID)
- NEWT/Android Fix PixelFormat/NativeWindowFormat/VisualID Selection
- Fix allows proper selection of native window formats: RGBA8888, RGBX8888 and RGB565
- Selection is performed in 3 steps:
1) @ Construction (non native): SurfaceHolder.setFormat( getSurfaceHolderFormat( caps ) )
2) @ Native Surface Creation: getANativeWindowFormat( androidFormat) -> ANativeWindow_setBuffersGeometry(..)
Note: The set native format is revalidated, i.e. read out via ANativeWindow_getFormat(..).
3) @ EGL Creation: ANativeWindow_getFormat(..) -> fixCaps(..) - simply fixing the chosen caps.
- NEWT GLWindow.GLLifecycleHook.resetCounter:
- Also reset GLAnimatorControl's counter, if attached.
- NEWT WindowImpl -> GLLifecycleHook.resetCounter() calls issued _after_ operation before unlock().
- JOGL/EGLGraphicsConfigurationFactory
- Validate whether the visualID matching EGLConfig depth buffer is suitable.
On HiSilicon/Vivante/Immersion.16: Depth buffer w/ matching visualID is zero!
- NativeWindow/Capabilities.compareTo: Fix alpha comparison
|
|
|
|
| |
would cap 'em (too long).
|
|
|
|
| |
ShaderState.uniform(..) returns false if no location available.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Culprit:
GLContext's makeCurrent() didn't clear the boolean flag 'unlockContextAndSurface'
in case the context is already current (-> recursion).
Above case was detected within a code block tailed by a finally block,
which acted on mentioned flag, i.e. called lock.unlock() and hence decremented the lock count
even though the method return w/ successful state.
Fixed.
Added debug code:
GLContext.release() debug code (DEBUG | TRACE_SWITCH),
recording stack trace of last release() call, which is dumped in case no current was current.
Added 2 unit tests:
- Simple recursive GLContext makeCurrent()/release() from within GLEventListener's display().
Test also validates lock count and lock ownership.
- GLAutoDrawable display() of another GLAutoDrawable
from within GLEventListener's display(..).
|
|
|
|
| |
uniforms/attributes); Refine API doc.
|
|
|
|
| |
(regression from e7064ece049705e013d80985eae698ce0ee3c4e3)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
GL3/GEOMETRY_SHADER unit tests. ; Simplified GLContext version number
- Adding GEOMETRY_SHADER support in ShaderCode, adding core GL3/GEOMETRY_SHADER unit tests
Chuck Ritola reported in December 2012 that we lack support of GEOMETRY_SHADER
and he provided a test case.
The latter is cleaned up to use GL3 core profile features only
tesing a pass-through and the flip-XYZ geometry shader.
ShaderUtil is fixed.
- Simplified GLContext version number
The OpenGL major/minor version is now hold in a VersionNumber instance
to simplify usage. Also expose it via getGLVersionNumber() while marking
getGLVersionMajor() and getGLVersionMinor() deprecated.
|
|
|
|
| |
count constraints at destroy.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
AnimatorBase: Add setModeBits/MODE_EXPECT_AWT_RENDERING_THREAD; FPSAnimator: Make transactions deterministic.
ExclusiveContextThread (ECT) allows user to dedicate a GLContext to a given thread.
Only the ECT will be allowed to claim the GLContext, hence releasing must be done on the ECT itself.
The core feature is accessible via GLAutoDrawable, while it can be conveniently enabled and disabled
via an AnimatorBase implementation. The latter ensures it's being released on the ECT and waits for the result.
Note that ECT cannot be guaranteed to work correctly w/ native (heavyweight) AWT components
due to resource locking and AWT-EDT access. This is disabled in all new tests per default and
noted on the API doc.
Note: 'Animator transaction' == start(), stop(), pause(), resume().
- Add ExclusiveContextThread (ECT) feature
- GLAutoDrawable NEW:
- Thread setExclusiveContextThread(Thread t)
- Thread getExclusiveContextThread()
- AnimatorBase NEW:
- Thread setExclusiveContext(Thread t)
- boolean setExclusiveContext(boolean enable)
- boolean isExclusiveContextEnabled()
- Thread getExclusiveContextThread()
- AnimatorBase: Add setModeBits/MODE_EXPECT_AWT_RENDERING_THREAD
Allows user to pre-determine whether AWT rendering is expected before starting the animator.
If AWT is excluded, a more simple and transaction correct impl. will be used.
- FPSAnimator: Make transactions deterministic.
FPSAnimator previously did not ensure whether a transaction was completed.
A deterministic transaction is required to utilize ECT.
FPSAnimator now uses same mechanism like Animator to ensure completeness,
i.e. Condition and 'finishLifecycleAction(..)'. Both are moved to AnimatorBase.
Tested manually on Linux/NV, Linux/AMD, Windows/NV and OSX/NV.
- All new tests validated correctness.
- All new tests shows an performance increase of ~3x w/ single GLWindow, where multiple GLWindows don't show a perf. increase.
|
|
|
|
|
|
|
|
|
| |
behavior for Client/Server FFP usage.
- GLArrayDataWrapper's init() only validated and set the 'name' for VBO ARRAY_BUFFER usage and validates it,
regardless of FFP or GLSL usage.
- GLArrayDataWrapper's init() included the no-VBO case to the above 'name' set/validate code path.
|
|
|
|
| |
read tests (TestPNGTextureFromFileNEWT)
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
657)
One FloatStack for each, MV, P and T, with initialialSize zero to save memore
and growSizes: MV = 16 arrays, P = 2 arrays, T = 2 arrays,
with array = 16 floats.
This shall save performance due to the preallocated stack when used
and growing only in the above mentioned grow intervals.
We may finetune the growSize, if required.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Windows: Child window is not translucent at all
- X11: Child window is translucent to parent's background,
however - parents content is _not_ 'composed in'.
- TODO: Find whether there is a solution or not.
- Note: The child window does not change it's rel. position
if parent moves! This is a feature, since we don't
have impl. a layout.
|
|
|
|
|
|
| |
in DEBUG case.
This seems to be crucial, since otherwise user is left in the dark w/o enabling debug flags.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Refines commit b6ae4e4dcbd740dd57de9dc3280d943e98cdaa76
- Limit getGLIntVersion() w/ non ARB ctx to 3.0 - similar to getGLVersionNumber(.., String).
- GLInt only proceeds w/ valid version
- Always test GLInt version before GLString version,
cont. w/ GLString version if GLInt failed.
- Fail if strictMode and GLInt failed, but GLString reports GL >= 3.0
- Fail is strictMode and neither GLInt nor GLString could validate version
- Clear glError before succeeding (could be tainted by GLInt version test)
|
|
|
|
|
|
|
|
|
|
| |
createContextARBVersions(..) GL Version Validation
String or integer based GL version validation now happens in setGLFunctionAvailability(..)
depending on the requested profile.
Due to the 'strictMatch' argument the method fails early when unsatisfied
also allowing to simplify createContextARBVersions(..) implementation.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
PROFILE_ALIASING compat -> core ; Fix setGLFunctionAvailability(..) failure path @ profile query
- Add GLRendererQuirks.GLNonCompliant, marking a GL context/profile non compliant.
Currently: 'Mesa DRI Intel(R) Sandybridge Desktop' && 3.1 compat profile
- Fix Bug 658 (Mesa 9.0 3.1 Intel compat quirk, 3.1 core only)
Detect case using new GLRendererQuirks.GLNonCompliant in setGLFunctionAvailability() and return 'false'.
- No PROFILE_ALIASING compat -> core
Use true core GL profiles / context if available to ensure
proper API behavior across platforms due to different functionality.
E.g. don't use GL3bc if GL3 is requested.
- Fix setGLFunctionAvailability(..) failure path @ profile query
Destroy temp context & zero result to cont. iterating through GL versions.
This missing cleanup lead to returning the faulty GL context handle and it's mapping/usage.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
creation is not possible on AWT-EDT.
The Intel HD3000 OpenGL driver on Windows will deadlock @ SwapBuffers in case the drawable is created
on a thread other than the window owner thread.
We are aware of such possibilities, nevertheless the AWTEDTExecutor.singleton.invoke(..)
allowed to execute the runnable in case it cannot be invoked on AWT-EDT.
The latter is the case if the current thread is not the AWT-EDT _and_ is holding the AWT tree-lock.
With GlueGen commit 0b43b43f889ad7fc220942b0076e2001ca3cf13f, the invoke method now consumes
an argument allowing to restrict the execution to AWT-EDT only.
In such case, the drawable will be realized at a later time from the AWT-EDT.
Such a situation could be triggered if a Frame's setVisible(true)
is not issued from the AWT-EDT, as it should be!
However, to relax such use cases - we better recognize such possible dealock and avoid it.
|
|
|
|
|
|
|
| |
GLCanvas.displayOnEDT: Also check null!=drawable
As for 1ae0737f34143a5ed655bd9c4d5fe9b0437c7774, an animator may inject a display Runnable on the EDT
before AWT destruction. In case this Runnable is executed after destruction on the EDT - it would fail.
|
|
|
|
|
|
|
|
|
|
| |
GLContextImpl.makeCurrent() - Handle !drawable.isRealized() early, don't catch 'create' Exception
Catching the createImpl() exception could be confusing, since it shall succeed.
Such exception is required to hint a platform bug and to debug it.
Hence testing drawable.isRealized() upfront is preferrable, i.e. catching a well known case
for returning CONTEXT_NOT_CURRENT.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
GLContext/GLDrawable
- Fix Bug 642 TestJSplitPaneMixHwLw01AWT
On Windows platform when mixing hw/lw JSplitPanel,
the GLCanvas is removed and added when splitter is moved.
The lack of robustness (see below) lead to an exception.
Note: Only w/ GLJPanel (no hw/lw mixing) the splitter can be moved
in both direction. Only here it is guaranteed that the GL component
will survive the action.
- Fix AWT-GLCanvas EDT Runnable: swapBuffer().. / display(..)
- Check drawable.isRealized() within the lock on the performing thread.
This is not possible before issuing the EDT Runnable action
since we cannot hold the lock beforehand.
- Robustness GLDrawableImpl
- boolean realized -> volatile boolean realized
- remove 'synchronized' on isRealized() and setRealized(..)
- Use dbl-checked locking on 'realized' test for swapBuffers() and setRealized(..)
- Robustness GLContextImpl
- Catch createImpl(..) exception and properly return CONTEXT_NOT_CURRENT
|
| |
|