Posted by
Manu on
Nov 17, 2022; 5:32pm
URL: https://forum.jogamp.org/JOGL-for-Mac-ARM-Silicon-tp4040887p4041939.html
Hello,
Now that the hanging issue can be reproduced, it's much easier to try to find where it occurs in Sweet Home 3D and other JOGL programs.
First, note that this issue happens also when the free version of
Rectangle application is running.
After a few tests, I found it happened when a Canvas3D instance is removed from the hierarchy of its container. With this in mind, I let the GC handle container hierarchy cleanup automatically but this delayed only the bug which eventually happened later. It looked like that a patch in Sweet Home 3D wouldn't be enough, but that some changes were required in JOGL itself.
Then after a few refinements in the part of
jogamp.opengl.macosx.cgl.MacOSXCGLContext class which handles GL layer detachment and destruction, I found that calling
OSXUtil.RunOnMainThread in
NSOpenGLImpl#release without waiting its completion (first parameter set to
false instead of
true) would fix the issue. Eureka!
But when testing under older macOS 10.9 and 10.13, I experienced a similar hanging bug when setting the first parameter of
OSXUtil.RunOnMainThread to
false even when BetterSnapTool or Rectangle don't run! As the recent changes in the MacOSXCGLContext class were mainly programmed for macOS 10.15 (see the
bug #1398), I propose for the moment to keep
wait parameter to
true only for macOS versions < 10.15 (note that I also tried to simply ignore
OSXUtil.RunOnMainThread for old macOS versions, because the call to
CGL.setContextView(ctx, 0) that it makes didn't exist before the fix of the bug #1398 but this didn't work).
This won't solve the hanging issue under older macOS versions, but at least, we can ask users to quit BetterSnapTool, Rectangle and the like under these macOS versions (or upgrade their system if they can), until we find a better solution.
Therefore, the current proposed change is to replace the statement:
OSXUtil.RunOnMainThread(true /* wait */, true /* kickNSApp */, new Runnable() {
@Override
public void run() {
CGL.setContextView(ctx, 0);
} } );
by (for your information, 10.16 version number is returned by Java 8):
boolean wait = System.getProperty("os.version").startsWith("10.")
&& !System.getProperty("os.version").startsWith("10.15")
&& !System.getProperty("os.version").startsWith("10.16");
OSXUtil.RunOnMainThread(wait /* wait */, true /* kickNSApp */, new Runnable() {
@Override
public void run() {
CGL.setContextView(ctx, 0);
} } );
You can test this solution with the modifications made to
jogl-all.jar file available in the ZIP file
jogl-all-2.4.0-rc-20221117.zip.
I tested it under macOS 10.9, 10.13.6, 12.6.1 Intel, 13.0 ARM and will test it under other macOS versions in the coming days (see
further post).
Hope you followed me!
Emmanuel Puybaret