Why is this sent to swing-dev ? That's completely the wrong list.
You want 2d-dev. I'll am replying on 2d-dev not swing-dev.
I wonder why I don't see this when I have my Mac closed and connect to
an external monitor ?
What is special here ?
> Now, when the main display is closed, the
CGDisplayIDToOpenGLDisplayMask(displayID) is returning 2 as glMask
The phrasing here is misleading suggesting that "glMask" is an API name.
The method is returning the value 2, which we then store in a variable
we call glMask ..
and then hand off as the value for NSOpenGLPFAScreenMask
Why would the call error out on this ? It seems like the right thing to do
What is the implication of not having glMask ? If we don't need it, why
specify it at all ?
What will happen if the second call fails too ? Won't we be back to the
crash ?
Nits:
1) Can we split that very long debugging trace statement ?
2) I guess we don't need to free "attrs" or "attrs1" since it is stack
allocated ..
Unfortunate that we have to repeat the entire initialisation minus glMask.
Can you think of a better way to do this ?
-phil.
On 9/25/19, 3:49 AM, Prasanta Sadhukhan wrote:
Hi All,
Please review a fix for an issue where it is seen that if a MacBookPro
is attached to an external monitor via dock and macbook lid is closed,
no Java swing applications will start.
It was found
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration()
is returning null in this particular setup.
Since it was difficult to reproduce locally, enabling tracing reveals
that CGLGraphicsConfig#getCGLConfigInfo() was failing in
NSOpenGLPixelFormat.initWithAttributes()
Appkit documentation
https://developer.apple.com/documentation/appkit/nsopenglpixelformat/1436219-initwithattributes?language=objc
says that it will return "|nil| if an object with the desired
attributes could not be initialized".
Now, when the main display is closed, the
CGDisplayIDToOpenGLDisplayMask(displayID)
is returning 2 as glMask which when passed as an attribute to
NSOpenGLPixelFormat, it fails to initialize.
Normally, with main Display being used, glMask is 1.
Proposed fix is to see if first initialization fails, then retry
initialization without the offending glMask value for
NSOpenGLPFAScreenMask attributes,
as documentation
https://developer.apple.com/documentation/appkit/1436213-opengl_pixel_format_attributes/nsopenglpfascreenmask?language=objc
says "All screens specified in the bit mask are guaranteed to be
supported by the pixel format.", so if it is not guranteed to be
supported, initAttributes() might fail.
Bug: https://bugs.openjdk.java.net/browse/JDK-8223158
webrev: http://cr.openjdk.java.net/~psadhukhan/8223158/webrev.0/
Regards
Prasanta