JavaFX Direct3D 12 - Second EA release

Christopher Schnick crschnick at xpipe.io
Mon Feb 2 14:59:36 UTC 2026


Looks good, the font looks correct now.

I went through most of the application to see if there's anything else. 
In the MonkeyTester page, I found this issue with popup windows in the 
menu bar and shadows I guess? In the d3d9 build, this does not occur. 
Video is attached.

If you get around to reviewing https://github.com/openjdk/jfx/pull/2058, 
you can use the same testing system to also run kickstartfx with d3d12 
as that is also broken in various ways on there.

With our main application, I am getting render corruption issues as 
shown in the video. I can also give instructions on how to run that 
application, it is very similar to kickstartfx. Just needs a bit more setup.

Other than that, as mentioned by Martin I think, the translucent 
background fill for the UNIFIED stage style does not show correctly in 
kickstartfx if you compare it to the normal build. The left sidebar 
frame should have the proper window theme color when the performance 
mode is disabled, however it is only white or black, depending on the 
system theme:


On 02/02/2026 12:36, Lukasz Kostyra wrote:
>
> This should be the final attempt at resolving this topic once and for 
> all :)
>
> I pushed 
> https://github.com/openjdk/jfx-sandbox/commit/dcaf8879db2b660e547e21edf31a1c8421aeab34 
> just now which in my testing makes KickstartFX work properly even on 
> UploadingPainter. After quite a bit of testing and scrolling it seems 
> to me the corrupted font issues are now resolved. Please give it a go 
> and let me know if it works on your end.
>
> -Lukasz
>
> *From:*openjfx-dev <openjfx-dev-retn at openjdk.org> *On Behalf Of 
> *Lukasz Kostyra
> *Sent:* Thursday, 29 January 2026 14:38
> *To:* Christopher Schnick <crschnick at xpipe.io>
> *Cc:* OpenJFX <openjfx-dev at openjdk.org>
> *Subject:* RE: Re: JavaFX Direct3D 12 - Second EA release
>
> Indeed it is still there, although on my machine it happens less with 
> Presenting Painter. I tried it a couple of times before sending the 
> email and it worked fine, so seems like I should also go buy a lottery 
> ticket today…
>
> Well, good news to me is that this happens on PresentingPainter, so I 
> now have some more possibilities in terms of debugging it in-place. 
> I’ll get back to you when it’s fixed.
>
> -Lukasz
>
> *From:*Christopher Schnick <crschnick at xpipe.io>
> *Sent:* Thursday, 29 January 2026 13:31
> *To:* Lukasz Kostyra <lukasz.kostyra at oracle.com>
> *Cc:* OpenJFX <openjfx-dev at openjdk.org>
> *Subject:* [External] : Re: JavaFX Direct3D 12 - Second EA release
>
> I commented out the uploading painter line and still see the same 
> issue. As you say, it shouldn't make a difference. Maybe you hit the 
> one time where the issue just didn't occur statistically speaking?
>
> The good news is that 
> https://bugs.openjdk.org/browse/JDK-8154847 should be finally fixed by 
> the new translucent backdrop PR, so it shouldn't need this property 
> anymore in the future when it is merged.
>
> On 29/01/2026 12:02, Lukasz Kostyra wrote:
>
>     I looked through KickstartFX and I noticed there’s a point where
>     KickstartFX forces the use of Uploading Painter -
>     PlatformState.java @ 112. UploadingPainter was designed to work
>     with software pipeline as a fallback mechanism (SW does not have
>     the SwapChain/Presentation mechanisms that HW pipelines use) so
>     using it with hardware-accelerated pipelines is not officially
>     supported. When I set prism.forceUploadingPainter to false text
>     and buttons rendered correctly with D3D12 on my machine. Could you
>     check if everything works fine on your end with UploadingPainter
>     disabled?
>
>     That being said, I do agree there should technically be no visual
>     difference between PresentingPainter and UploadingPainter. I have
>     some theories as to why that would be the case, but because
>     UploadingPainter with hardware pipelines is not officially
>     supported I’ll have to push this issue towards a later point in
>     time. UploadingPainter makes this a bit extra difficult to debug
>     because graphics debuggers rely on applications calling Present()
>     to determine when the application progresses to the next frame -
>     with UploadingPainter no Present() is called and debuggers can’t
>     capture the frame properly for analysis.
>
>     As for Hyper-V problems - I didn’t get a chance to test these yet
>     but we also did not try running JavaFX with D3D12 backend on
>     virtualized platforms. I will take a look at that use case also at
>     a later point in time, once the performance improvements are
>     completed.
>
>     For both of these (UploadingPainter issues and Hyper-V issues)
>     I’ll add separate bugs to my backlog and tackle them later down
>     the line.
>
>     I also checked why UploadingPainter was preferred in KickstartFX
>     and this seems to be the issue -
>     https://bugs.openjdk.org/browse/JDK-8154847. If what Martin
>     mentioned in comment history is correct, there’s a possibility
>     that with D3D12 there should be no transparency issues, as D3D12
>     defaults to alpha-supported SwapChain buffer (BGRX format exists
>     but presents some technical issues and limitations, BGRA is more
>     convenient). However I had no way of verifying this theory, on my
>     Intel Iris Xe laptop the reproducer works as expected on both D3D
>     and D3D12, with or without UploadingPainter.
>
>     Let me know if KickstartFX runs properly with PresentingPainter.
>
>     -Lukasz
>
>     *From:*Christopher Schnick <crschnick at xpipe.io>
>     <mailto:crschnick at xpipe.io>
>     *Sent:* Wednesday, 21 January 2026 13:54
>     *To:* Lukasz Kostyra <lukasz.kostyra at oracle.com>
>     <mailto:lukasz.kostyra at oracle.com>
>     *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>     <mailto:openjfx-dev at openjdk.org>
>     *Subject:* [External] : Re: JavaFX Direct3D 12 - Second EA release
>
>     Alright, that is good to know. I also ran the d3d12 build in a
>     Hyper-V Windows 11 VM, which are known to cause issues. For
>     example, this issue happens in those VMs with StageStyle.UNIFIED:
>     https://bugs.openjdk.org/browse/JDK-8154847 (kickstartfx uses the
>     unified stage style unless you turn on performance mode in the
>     settings menu)
>
>     On that system, the app sometimes froze completely, sometimes, the
>     rendered image got stuck. Changing the performance mode setting
>     and the property -Dprism.forceUploadingPainter=true changed the
>     behavior, but it was broken in some way in all configurations.
>
>     You should be able to reproduce these issues easily with the
>     Windows Sandbox feature:
>     https://learn.microsoft.com/en-us/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-install
>     <https://urldefense.com/v3/__https:/learn.microsoft.com/en-us/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-install__;!!ACWV5N9M2RV99hQ!PhZXH7yVYtau5GffJqYZ2u0kJWnvdfqwZ505JNps6FUDmkZT1cTaY28P1sUyr3UvO_oLMcT6UkYRK3KwB9dOzqRg$>
>
>     On 21/01/2026 13:48, Lukasz Kostyra wrote:
>
>         Thanks for checking.
>
>         I ran the KickstartFX build one more time, it failed but I
>         found some leftover global gradle.properties file which
>         defined older JDK which broke the build. Changing JDK to
>         25.0.1 everything built and works fine.
>
>         I also found a way to build KickstartFX using custom JFX
>         (customJavaFxLibsPath in build.gradle) and can reproduce your
>         font issues locally on D3D12. I’ll report back when I solve
>         them on my end. :)
>
>         -Lukasz
>
>         *From:*Christopher Schnick <crschnick at xpipe.io>
>         <mailto:crschnick at xpipe.io>
>         *Sent:* Tuesday, 20 January 2026 16:24
>         *To:* Lukasz Kostyra <lukasz.kostyra at oracle.com>
>         <mailto:lukasz.kostyra at oracle.com>
>         *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>         <mailto:openjfx-dev at openjdk.org>
>         *Subject:* [External] : Re: JavaFX Direct3D 12 - Second EA release
>
>         In our main application I am getting the following error
>         spammed in the logs:
>
>         16:18:08:571 - error: java.lang.NullPointerException: Cannot
>         invoke "com.sun.prism.Texture.getPixelFormat()" because "tex"
>         is null
>         16:18:08:571 - error:     at
>         javafx.graphics at 26-internal/com.sun.prism.impl.BaseGraphics.drawTexture(BaseGraphics.java:464)
>         16:18:08:571 - error:     at
>         javafx.graphics at 26-internal/com.sun.prism.impl.ps.BaseShaderGraphics.drawTexture(BaseShaderGraphics.java:159)
>         16:18:08:571 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGImageView.renderContent(NGImageView.java:123)
>         16:18:08:571 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:571 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGImageView.doRender(NGImageView.java:103)
>         16:18:08:571 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:571 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:571 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:571 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:571 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:571 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2279)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2186)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2213)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.CacheFilter.renderNodeToCache(CacheFilter.java:682)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.CacheFilter.render(CacheFilter.java:586)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderCached(NGNode.java:2343)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2054)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2279)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2186)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2213)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.CacheFilter.renderNodeToCache(CacheFilter.java:682)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.CacheFilter.render(CacheFilter.java:586)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderCached(NGNode.java:2343)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2054)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:481)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:329)
>         16:18:08:572 - error:     at
>         javafx.graphics at 26-internal/com.sun.javafx.tk.quantum.UploadingPainter.run(UploadingPainter.java:143)
>         16:18:08:572 - error:     at
>         java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545)
>         16:18:08:572 - error:     at
>         java.base/java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:369)
>         16:18:08:572 - error:     at
>         java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java)
>
>         In kickstartfx, I still get the font rendering issues. Can you
>         share the problems you encountered? I tried to build it on a
>         blank VM with git clone, setting a JDK25 in the PATH, and
>         running gradlew.bat run without issues.
>
>         On 20/01/2026 15:40, Lukasz Kostyra wrote:
>
>             Hi Christopher,
>
>             After Christmas break I came back to this issue with some
>             new patches. There were some problems I found with the
>             clear optimization, I just submitted
>             https://github.com/openjdk/jfx-sandbox/commit/8d3ec1deff714caa4eab779581a341e18dd78f31
>             <https://urldefense.com/v3/__https:/github.com/openjdk/jfx-sandbox/commit/8d3ec1deff714caa4eab779581a341e18dd78f31__;!!ACWV5N9M2RV99hQ!Js1REsWcDjMJTtd7_06jSspPNfrXAhmcztgQtVr7IH0e7xUQW51OhBZ-P9O6TfdB0v6e7Brk7yYlHI7mq363A1sg$>
>             and according to my local testing everything seems to be
>             fine now.
>
>             When you have a moment, could you check out the changes
>             above and let me know if everything works correctly in
>             your app?
>
>             If there are still problems I would like to find a way to
>             build your app and test it locally. I tried doing that
>             earlier via https://github.com/xpipe-io/kickstartfx
>             <https://urldefense.com/v3/__https:/github.com/xpipe-io/kickstartfx__;!!ACWV5N9M2RV99hQ!K0ztYeDtYFyIwxlmMB-9MDuvY7Xyd60-LuJK99hex3mclCWl29MJfnxkz2mmECxINzNr5bAdKvQ64O9Xn9_QfENu$>
>             you linked earlier but encountered some problems when
>             building, so I’m going to need your help or some
>             instructions on how to build the app.
>
>             Regards,
>
>             -Lukasz
>
>             *From:*openjfx-dev <openjfx-dev-retn at openjdk.org>
>             <mailto:openjfx-dev-retn at openjdk.org> *On Behalf Of
>             *Lukasz Kostyra
>             *Sent:* Wednesday, 10 December 2025 13:29
>             *To:* Christopher Schnick <crschnick at xpipe.io>
>             <mailto:crschnick at xpipe.io>
>             *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>             <mailto:openjfx-dev at openjdk.org>
>             *Subject:* RE: Re: JavaFX Direct3D 12 - Second EA release
>
>             It should work fine without the property. Thanks for your
>             help, I’ll keep searching.
>
>             -Lukasz
>
>             *From:*Christopher Schnick <crschnick at xpipe.io>
>             *Sent:* Tuesday, 9 December 2025 17:10
>             *To:* Lukasz Kostyra <lukasz.kostyra at oracle.com>
>             *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>             *Subject:* [External] : Re: JavaFX Direct3D 12 - Second EA
>             release
>
>             I tried this commit, but the problem shows up again. I
>             tested the previous commit with the passed property again,
>             and that one still works.
>
>             Or should I still pass the property in this commit as well?
>
>             On 09/12/2025 4:36 PM, Lukasz Kostyra wrote:
>
>                 Hi Christopher,
>
>                 I updated the direct3d12 branch with the fix -
>                 https://github.com/openjdk/jfx-sandbox/commit/ffc078b9593c44a8ed0629a74b8bda18357f93a8
>                 <https://urldefense.com/v3/__https:/github.com/openjdk/jfx-sandbox/commit/ffc078b9593c44a8ed0629a74b8bda18357f93a8__;!!ACWV5N9M2RV99hQ!OLgt8HGQc2SZQqycgcFI2bUPgQXEdES6FZw0Gn_bo_kiS2WoY4A68Z3JxY-ElC_58HSF12FXKCoat4MrrESK9ceD$>
>                 . Let me know how it works and if the problem has been
>                 resolved.
>
>                 Thanks,
>
>                 -Lukasz
>
>                 *From:*openjfx-dev <openjfx-dev-retn at openjdk.org>
>                 <mailto:openjfx-dev-retn at openjdk.org> *On Behalf Of
>                 *Lukasz Kostyra
>                 *Sent:* Thursday, 4 December 2025 11:52
>                 *To:* Christopher Schnick <crschnick at xpipe.io>
>                 <mailto:crschnick at xpipe.io>
>                 *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>                 <mailto:openjfx-dev at openjdk.org>
>                 *Subject:* RE: Re: JavaFX Direct3D 12 - Second EA release
>
>                 Thanks for checking. I filed
>                 https://bugs.openjdk.org/browse/JDK-8373088 to track
>                 this since this is unrelated to specifically text,
>                 will probably get to it in a few days.
>
>                 -Lukasz
>
>                 *From:*Christopher Schnick <crschnick at xpipe.io>
>                 *Sent:* Wednesday, 3 December 2025 18:53
>                 *To:* Lukasz Kostyra <lukasz.kostyra at oracle.com>
>                 *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>                 *Subject:* [External] : Re: JavaFX Direct3D 12 -
>                 Second EA release
>
>                 This commit fixes the problem when the property is set
>                 to false and it shows up again if the property is not
>                 set to false
>
>                 On 03/12/2025 5:54 PM, Lukasz Kostyra wrote:
>
>                     Hi Christopher,
>
>                     I did not find the way to reproduce this locally,
>                     but I found a problem with one of the
>                     optimizations that is in the backend. To double
>                     check if that is in fact the issue I pushed
>                     https://github.com/openjdk/jfx-sandbox/commit/7078d621dc282ab8439800b84b78377dec3eea89
>                     <https://urldefense.com/v3/__https:/github.com/openjdk/jfx-sandbox/commit/7078d621dc282ab8439800b84b78377dec3eea89__;!!ACWV5N9M2RV99hQ!JFEGrvRPb5-P9TxSZen0sbWuRq_Go_lMwM3kO5m0u_RlMgJW1cDfe8HxdAlgEedAsg4aSm99IyDYzbsN8x-LMbPQ$>
>                     to disable the optimization (it is on by default,
>                     disabling it fixes that specific problem on my
>                     end) and I’d like to double-check if this is the
>                     correct lead.
>
>                     When you have a moment, could you build JFX with
>                     that change and run your app with
>                     “-Dprism.d3d12.clearOpts=false” added to the
>                     command line?
>
>                     If the problem persists with prism.d3d12.clearOpts
>                     set to false I would need some more information on
>                     how these labels are rendered to track this down.
>
>                     Thanks,
>
>                     -Lukasz
>
>                     *From:*Christopher Schnick <crschnick at xpipe.io>
>                     <mailto:crschnick at xpipe.io>
>                     *Sent:* Friday, 28 November 2025 13:25
>                     *To:* Lukasz Kostyra <lukasz.kostyra at oracle.com>
>                     <mailto:lukasz.kostyra at oracle.com>
>                     *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>                     <mailto:openjfx-dev at openjdk.org>
>                     *Subject:* [External] : Re: JavaFX Direct3D 12 -
>                     Second EA release
>
>                     I did not encounter the vanishing issue anymore
>                     with that build, so at least it is usable.
>
>                     However, the font rendering issue still exists for
>                     some nodes:
>
>                     It is not deterministic, meaning that if I just
>                     scroll the scrollpane forward and back, the same
>                     text might get rendered correctly.
>
>                     Also, did you see the performance results I posted
>                     for my AMD system? Performance was quite bad
>                     there, so this is not in a stage where I can test
>                     this in production a bit.
>
>                     On 28/11/2025 12:41, Lukasz Kostyra wrote:
>
>                         Hi Christopher,
>
>                         I just pushed a fix for JDK-8371995 onto
>                         direct3d12 branch in the sandbox -
>                         https://github.com/openjdk/jfx-sandbox/tree/direct3d12
>                         <https://urldefense.com/v3/__https:/github.com/openjdk/jfx-sandbox/tree/direct3d12__;!!ACWV5N9M2RV99hQ!KuiGt3yDg1iNtCswOA3yLUbPKFpTnRKQE9clxnsd6xQRhnGJLoz7c697JC77xG2Q4qwsMWDePar6hRx9DY1uTPpy$>
>                         . If you find a moment, could you build JFX
>                         from that branch and check if your app works
>                         correctly?
>
>                         -Lukasz
>
>                         *From:*openjfx-dev
>                         <openjfx-dev-retn at openjdk.org>
>                         <mailto:openjfx-dev-retn at openjdk.org> *On
>                         Behalf Of *Lukasz Kostyra
>                         *Sent:* Monday, 17 November 2025 15:14
>                         *To:* Christopher Schnick <crschnick at xpipe.io>
>                         <mailto:crschnick at xpipe.io>
>                         *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>                         <mailto:openjfx-dev at openjdk.org>
>                         *Subject:* RE: Re: JavaFX Direct3D 12 - Second
>                         EA release
>
>                         I might’ve found the problem, there is an
>                         assertion that triggers when multiple text
>                         objects using different fonts are drawn. It
>                         could be related (AFAIK Label controls will
>                         eventually end up at the same text rendering
>                         routines as Text nodes). Assertions are
>                         compiled out on Release for performance, so
>                         there is a chance it would corrupt the
>                         rendering without anything meaningful shown on
>                         screen.
>
>                         To track this I just filed
>                         https://bugs.openjdk.org/browse/JDK-8371995 .
>                         I will check it and let you know when I fix it.
>
>                         On your side It might still be handy to build
>                         JFX in DebugNative, to confirm if the
>                         triggered assertion is the same and to later
>                         confirm if the fix is working for you too.
>
>                         -Lukasz
>
>                         *From:*Christopher Schnick <crschnick at xpipe.io>
>                         *Sent:* Saturday, 15 November 2025 17:39
>                         *To:* Lukasz Kostyra <lukasz.kostyra at oracle.com>
>                         *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>                         *Subject:* Re: [External] : Re: JavaFX
>                         Direct3D 12 - Second EA release
>
>                         Forgot to add, there is nothing out of the
>                         ordinary printed in the verbose logs.
>
>                         If I find the time, I can look into compiling
>                         a debug build.
>
>                         But the problem should be reproducible somehow
>                         when just automatically creating a lot of
>                         labels with random styles, sizes, and text.
>                         Some of them should break as they did for me.
>
>                         On 15/11/2025 17:34, Christopher Schnick wrote:
>
>                             Ok, so I had more time to debug it. The
>                             one weird thing I observed when it was
>                             working was that some labels have
>                             corrupted text rendering:
>
>
>                             Not all of them, most are fine. There are
>                             no differences in terms of style classes
>                             etc. between the labels. When scrolling,
>                             the rendering sometimes switches between
>                             this corrupted and normal state after some
>                             delay.
>
>                             After a while I also figured out that text
>                             rendering is responsible for the issue of
>                             the nodes vanishing: Certain label
>                             contents broke the renderer. For example,
>                             in my application, the string "Password
>                             manager" when assigned to a label broke it
>                             and nothing was rendered anymore. I tried
>                             to find an easy reproducer but was not
>                             able to. It's probably very dependent on
>                             all the different style classes that
>                             influence the text shape/size/etc.
>
>                             On 13/11/2025 16:30, Lukasz Kostyra wrote:
>
>                                 Thanks for checking.
>
>                                 It is very possible the D3D12 runtime
>                                 did not like something, could be
>                                 related to your specific hardware.
>                                 D3D12 by now has many extensions which
>                                 differ depending on hardware and can
>                                 lift certain restrictions - we already
>                                 internally had a case where one GPU
>                                 had some restriction that was not
>                                 enforced on another GPU and we had to
>                                 accommodate that.
>
>                                 The first step would be to try running
>                                 D3D12 with “-Dprism.verbose=true
>                                 -Dprism.debug=true”. These should
>                                 print additional logs that might have
>                                 some extra information.
>
>                                 If there’s nothing useful there, next
>                                 step would be to build JavaFX with
>                                 -PCONF=DebugNative - this will compile
>                                 shaders in Debug, add assertions and
>                                 debug logs to the backend - and then
>                                 run your app with D3D12 debug layers
>                                 and GPU debugging enabled by adding
>                                 “-Dprsim.d3d12.debugLayers=true
>                                 -Dprism.d3d12.gpuDebug=true”. Those
>                                 will slow down the app significantly,
>                                 but will also tell D3D12 to run
>                                 additional API use and GPU use checks.
>
>                                 If the problem happens during a render
>                                 loop and debug layers catch it, there
>                                 is a chance it will cascade into other
>                                 errors and spam the console output -
>                                 you can tell D3D12 debug layers to
>                                 trigger an assertion on first
>                                 encountered error with
>                                 “-Dprism.d3d12.breakOnError=true”.
>
>                                 I am running out of time today to
>                                 check this myself, but if you find
>                                 something let me know - I’ll try to
>                                 reproduce the problem myself and we’ll
>                                 see where we go from there.
>
>                                 Good luck!
>
>                                 - Lukasz
>
>                                 *From:*Christopher Schnick
>                                 <crschnick at xpipe.io>
>                                 <mailto:crschnick at xpipe.io>
>                                 *Sent:* Thursday, 13 November 2025 16:11
>                                 *To:* Lukasz Kostyra
>                                 <lukasz.kostyra at oracle.com>
>                                 <mailto:lukasz.kostyra at oracle.com>
>                                 *Cc:* openjfx-dev at openjdk.org
>                                 *Subject:* [External] : Re: JavaFX
>                                 Direct3D 12 - Second EA release
>
>                                 I just tried to run a project with
>                                 provided jmods and at some point,
>                                 certain nodes are just not rendered
>                                 anymore and the window contents
>                                 vanish. But they render for a short
>                                 period of time.
>
>                                 There is no exception thrown as far as
>                                 I can see, so not sure what you need
>                                 for debugging.
>
>                                 For testing, this is the built
>                                 application with the d3d12 jmods that
>                                 you can use to attempt to reproduce
>                                 the problem:
>                                 https://we.tl/t-DJuX0BeqXm
>                                 <https://urldefense.com/v3/__https:/we.tl/t-DJuX0BeqXm__;!!ACWV5N9M2RV99hQ!K0ztYeDtYFyIwxlmMB-9MDuvY7Xyd60-LuJK99hex3mclCWl29MJfnxkz2mmECxINzNr5bAdKvQ64O9Xn7hHbsl_$>
>                                 . It is built from these sources:
>                                 https://github.com/xpipe-io/kickstartfx
>                                 <https://urldefense.com/v3/__https:/github.com/xpipe-io/kickstartfx__;!!ACWV5N9M2RV99hQ!K0ztYeDtYFyIwxlmMB-9MDuvY7Xyd60-LuJK99hex3mclCWl29MJfnxkz2mmECxINzNr5bAdKvQ64O9Xn9_QfENu$>
>
>                                 On 13/11/2025 14:40, Lukasz Kostyra wrote:
>
>                                     Hello openjfx-dev,
>
>                                     The second Early Access(EA) build
>                                     of JavaFX with the Windows
>                                     Direct3D 12 rendering pipeline is
>                                     now available at:
>                                     https://jdk.java.net/javafxdirect3d12/
>                                     <https://urldefense.com/v3/__https:/jdk.java.net/javafxdirect3d12/__;!!ACWV5N9M2RV99hQ!K0ztYeDtYFyIwxlmMB-9MDuvY7Xyd60-LuJK99hex3mclCWl29MJfnxkz2mmECxINzNr5bAdKvQ64O9Xnw7Bj6i8$>
>
>                                     Please test this bundle and share
>                                     your feedback by:
>
>                                     - emailing
>                                     openjfx-dev at openjdk.java.net or
>
>                                     - reporting issues via
>                                     JBS[https://bugs.openjdk.org/] or
>                                     at https://bugreport.java.com
>                                     <https://urldefense.com/v3/__https:/bugreport.java.com__;!!ACWV5N9M2RV99hQ!K0ztYeDtYFyIwxlmMB-9MDuvY7Xyd60-LuJK99hex3mclCWl29MJfnxkz2mmECxINzNr5bAdKvQ64O9Xn-g1RFIV$>
>
>                                     This is the second EA release. The
>                                     backend is feature-complete and
>                                     went through a first optimization
>                                     pass, but it still requires some
>                                     more testing on more hardware
>                                     variants before we can consider it
>                                     complete. As such, with this
>                                     release we also would like to call
>                                     for help with performance testing
>                                     the backend (more details on that
>                                     will be sent in a separate email
>                                     thread).
>
>                                     Known issues and pending tasks are
>                                     captured on JBS and can be
>                                     accessed using the filter provided
>                                     on the Direct3D 12 EA page
>                                     [https://jdk.java.net/javafxdirect3d12/
>                                     <https://urldefense.com/v3/__https:/jdk.java.net/javafxdirect3d12/__;!!ACWV5N9M2RV99hQ!K0ztYeDtYFyIwxlmMB-9MDuvY7Xyd60-LuJK99hex3mclCWl29MJfnxkz2mmECxINzNr5bAdKvQ64O9Xnw7Bj6i8$>].
>                                     Before reporting a new bug, please
>                                     review the existing issues to
>                                     avoid duplicates.
>
>                                     Important Notes:
>
>                                     1. This is a Windows-specific
>                                     feature, so only a
>                                     Windows-specific bundle is provided.
>
>                                     2. The default rendering pipeline
>                                     is set to d3d12. Use
>                                     "-Dprism.order=d3d" or
>                                     "-Dprism.order=sw" to select one
>                                     of the other pipelines for
>                                     comparison testing.
>
>                                     3. It is recommended to use JDK 25
>                                     or later.
>
>                                     4. At this stage D3D12 backend is
>                                     feature-complete and went through
>                                     the first phase of optimization.
>                                     It is worth noting that, while
>                                     generally we noticed performance
>                                     improvements, it might not be on
>                                     par with D3D backend on every
>                                     machine combo  - we already noted
>                                     performance being worse on recent
>                                     NVidia discrete GPUs
>                                     [https://bugs.openjdk.org/browse/JDK-8370486]
>                                     and are looking for solutions.
>
>                                     5. Issue behavior may vary across
>                                     different hardware, so please
>                                     provide detailed information, such
>                                     as the output of "java
>                                     -Dprism.verbose=true" or used
>                                     hardware, when reporting or
>                                     discussing issues.
>
>                                     6. Refer: Run HelloWorld using
>                                     JavaFX SDK
>                                     [https://openjfx.io/openjfx-docs/#install-javafx
>                                     <https://urldefense.com/v3/__https:/openjfx.io/openjfx-docs/*install-javafx__;Iw!!ACWV5N9M2RV99hQ!K0ztYeDtYFyIwxlmMB-9MDuvY7Xyd60-LuJK99hex3mclCWl29MJfnxkz2mmECxINzNr5bAdKvQ64O9Xn8uMZKUY$>]
>
>                                     We look forward to your feedback.
>
>                                     Regards,
>
>                                     Lukasz
>
>                                     Confidential- Oracle Internal
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20260202/9a0d1b62/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: wbZNSCRMO1m9sFIV.png
Type: image/png
Size: 26376 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20260202/9a0d1b62/wbZNSCRMO1m9sFIV-0001.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 18275 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20260202/9a0d1b62/image001-0001.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image002.png
Type: image/png
Size: 57114 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20260202/9a0d1b62/image002-0001.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: menubar.mp4
Type: video/mp4
Size: 567183 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20260202/9a0d1b62/menubar-0001.mp4>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: corruption.mp4
Type: video/mp4
Size: 1597036 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20260202/9a0d1b62/corruption-0001.mp4>


More information about the openjfx-dev mailing list