UnstableChanges

Summary

  1. Bug 1184 - JOGL AWT Canvas Components don't update (details)
  2. Bug 1181 - JOGL WebStart Applications using GLCanvas/AWT may Deadlock by (details)
  3. Bug 1161 - Fix Canvas resize stops the rendering in Mac OS X (mostly (details)
  4. JAWTWindow: Fix binary compatibility: Add old variants of deprecated (details)
Commit 6ae08be1742e6d805b316c0d440364854a49e68f by Sven Gothel
Bug 1184 - JOGL AWT Canvas Components don't update AWTGraphicsConfiguration when reconfigured.

JOGL AWT Components, e.g. GLCanvas or NewtCanvasAWT,
may be reconfigured by moving them to another display/monitor
or by other means.

Since AWT has no means to notify the user code via an event,
JOGL components usually determine the reconfiguration via
the override 'GraphicsConfiguration getGraphicsConfiguration()'.

GLCanvas is sensible to this reconfiguration,
however its AWTGraphicsConfiguration (owned via JAWTWindow)
is not changed.

Implement reconfiguration detection for all JOGL AWT Components
and update the AWTGraphicsConfiguration if required.

For now, constraint reconfiguration on GraphicsDevice change
as currently implemented in GLCanvas.

The updated AWTGraphicsConfiguration allows using the updated
GraphicsDevice as it might be required for further information,
e.g. pixel-scale on OSX.
The file was modifiedsrc/newt/classes/jogamp/newt/awt/NewtFactoryAWT.java (diff)
The file was modifiedmake/scripts/tests.sh (diff)
The file was modifiedsrc/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java (diff)
The file was modifiedsrc/nativewindow/classes/com/jogamp/nativewindow/awt/AWTGraphicsConfiguration.java (diff)
The file was modifiedsrc/nativewindow/classes/com/jogamp/nativewindow/awt/JAWTWindow.java (diff)
The file was modifiedsrc/jogl/classes/com/jogamp/opengl/awt/GLCanvas.java (diff)
Commit b0af5159bc6100a6262afe6b52f9092a207ac2b3 by Sven Gothel
Bug 1181 - JOGL WebStart Applications using GLCanvas/AWT may Deadlock by two AWT-EDT on Java >= 1.8.0_45

Root cause:

- AWT Toolkit global Lock

Our locking scheme (AWT-EDT-1):
- Surface Lock
- sun.awt.SunToolkit.awtLock()
- Component.getGraphicsConfiguration() -> synchronized(Component.getTreeLock())

Other AWT-EDT-2 by Webstart:
- synchronized(Component.getTreeLock())
- sun.awt.SunToolkit.awtLock()

Results in a deadlock.

Solution:
- Issue Component.getGraphicsConfiguration() before awtLock(),
   where Component.getGraphicsConfiguration() is being used to
   detect possible reconfiguration.

- Also use updated AWTGraphicsConfiguration's GraphicsConfiguration
   if no 'new' detection is required.
The file was modifiedsrc/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java (diff)
The file was modifiedsrc/nativewindow/classes/jogamp/nativewindow/jawt/x11/X11JAWTWindow.java (diff)
The file was modifiedsrc/nativewindow/classes/com/jogamp/nativewindow/awt/JAWTWindow.java (diff)
The file was modifiedsrc/nativewindow/classes/jogamp/nativewindow/jawt/macosx/MacOSXJAWTWindow.java (diff)
The file was modifiedsrc/nativewindow/classes/jogamp/nativewindow/jawt/windows/WindowsJAWTWindow.java (diff)
Commit 4eeddd0d446f8491dde2e5b0e3e11e0d5b0be9b7 by Sven Gothel
Bug 1161 - Fix Canvas resize stops the rendering in Mac OS X (mostly from WebStart)

Root cause:

JAWTWindow's JAWTComponentListener 'isShowing'
state is initialized while attaching it on-thread
and updated via hierarchy-changed event.

JAWTComponentListener attachment to the component
is issued at JAWTWindow's creation but on the AWT-EDT,
hence it may happen at a later time.

In this bug scenario, it happens very late,
so that the hierarchy-changed event is missed
and 'isShowing' is never set to 'true'.

Solution is to update 'isShowing' state
on the actual AWT-EDT when attaching to the component.
Also make 'isShowing' volatile.
The file was modifiedsrc/nativewindow/classes/com/jogamp/nativewindow/awt/JAWTWindow.java (diff)
Commit 63331d5da80f66753442fe651f517b3540b517ce by Sven Gothel
JAWTWindow: Fix binary compatibility: Add old variants of deprecated method, throwing a RuntimeException
The file was modifiedmake/scripts/tests.sh (diff)
The file was modifiedsrc/nativewindow/classes/com/jogamp/nativewindow/awt/JAWTWindow.java (diff)