[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    Re: [Rev 02] RFR: 8235627: Blank stages when running JavaFX app in a macOS virtual machine
From:       Ambarish Rapte <arapte () openjdk ! java ! net>
Date:       2019-12-20 19:20:56
Message-ID: 96kichj7x413xUydoPg075wgc7AjbM2Izblx7fO6UKc=.c05f47e1-548b-4053-8115-e788cdc62bac () github ! com
[Download RAW message or body]

On Fri, 20 Dec 2019 19:20:56 GMT, Frederic Thevenet \
<github.com+7450507+fthevenet@openjdk.org> wrote:

> > This is a PR for [JDK-8235627](https://bugs.openjdk.java.net/browse/JDK-8235627).
> > 
> > When running a JavaFX application in macOS guest VM, the main stage is completely \
> > blank, with the following errors: CGLChoosePixelFormat error: 10002, \
> > CGLCreateContext error: 10002 This behavior was observed with a macOS 10.15 guest \
> > OS on both VMWare player and VirtualBox, on a Windows 10 host. 
> > This is an old issue that has already been reported several times (notably as \
> > JDK-8154852) but is claimed to have been fixed by JDK-8154148. However the fix \
> > provided by JDK-8154148 is incomplete; while it does fix a JVM crash, it doesn't \
> > prevent an incorrect pixel format to be retrieved, which is the root cause for \
> > the stage being empty. 
> > The problematic code is located at #96 in GlassView3D.m:
> > 
> > 095: CGLError err = CGLChoosePixelFormat(attributes, &pix, &npix);
> > 096: if ((err == kCGLNoError) && (npix == 0))
> > 097: {
> > 098: const CGLPixelFormatAttribute attributes2[] =
> > 099: {
> > 100: kCGLPFAAllowOfflineRenderers,
> > 101: (CGLPixelFormatAttribute)0
> > 102: };
> > 103: err = CGLChoosePixelFormat(attributes2, &pix, &npix);
> > 104: }
> > 
> > 
> > In a comment in JDK-8154148, the following claim is made: "[...] an error happens \
> > is when something bad or invalid has occurred. An unsatisfied pixel format \
> > request is indicated by npix is 0 and pix is NULL. Hence I feel it is a cleaner \
> > and clearer logic to request a different format when npix is 0 and err is \
> > kCGLNoError." (https://bugs.openjdk.java.net/browse/JDK-8154148?focusedCommentId=1 \
> > 3980465&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-13980465)
> >  
> > From what I could observe, this is not necessarily true; in this case where a \
> > pixel format satisfying the initial conditions could not be found, the return \
> > code is kCGLBadPixelFormat (10002); which means we don't try to get a pixel \
> > format with less restrictive condition. This suggests that a better condition for \
> > the second call to CGLChoosePixelFormat (line #103) should be "if (pix == NULL)" \
> > instead of "if ((err == kCGLNoError) && (npix == 0))" This is further supported \
> > by a sample in Apple developer's documentation on how to choose a pixel format: \
> > https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/opengl_pixelformats/opengl_pixelformats.html
> > 
> 
> The pull request has been updated with 1 additional commit.

Looks good to me too.

-------------

Marked as reviewed by arapte (Reviewer).

PR: https://git.openjdk.java.net/jfx/pull/65


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic