-
Bug
-
Resolution: Fixed
-
P3
-
internal
-
generic
-
windows
Since D3D12, you can enter fullscreen mode via ALT+ENTER.
Note: This behavior can be disabled in DXGI. Godot did that for example, can be seen here: https://github.com/godotengine/godot/blob/master/drivers/d3d12/rendering_device_driver_d3d12.cpp#L2852
The exception, that will also lead to a crash:
java.lang.NullPointerException: D3D12 swapchain is NULL
at javafx.graphics@25-direct3d12/com.sun.prism.d3d12.D3D12SwapChain.<init>(D3D12SwapChain.java:66)
at javafx.graphics@25-direct3d12/com.sun.prism.d3d12.D3D12SwapChain.create(D3D12SwapChain.java:78)
at javafx.graphics@25-direct3d12/com.sun.prism.d3d12.D3D12ResourceFactory.createPresentable(D3D12ResourceFactory.java:338)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:81)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545)
at java.base/java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:369)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java)
at --- Async.Stack.Trace --- (captured by IntelliJ IDEA debugger)
at java.base/java.util.concurrent.FutureTask.<init>(FutureTask.java:153)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.RenderJob.<init>(RenderJob.java:45)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.PaintCollector.lambda$liveRepaintRenderJob$2(PaintCollector.java:330)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.PaintCollector.liveRepaintRenderJob(PaintCollector.java:329)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.GlassViewEventHandler$ViewEventNotification.get(GlassViewEventHandler.java:810)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.GlassViewEventHandler$ViewEventNotification.get(GlassViewEventHandler.java:770)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleViewEvent(GlassViewEventHandler.java:850)
at javafx.graphics@25-direct3d12/com.sun.glass.ui.View.handleViewEvent(View.java:543)
at javafx.graphics@25-direct3d12/com.sun.glass.ui.View.notifyResize(View.java:884)
at javafx.graphics@25-direct3d12/com.sun.glass.ui.win.WinView.notifyResize(WinView.java:91)
at javafx.graphics@25-direct3d12/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics@25-direct3d12/com.sun.glass.ui.win.WinApplication.lambda$runLoop$0(WinApplication.java:168)
at java.base/java.lang.Thread.run(Thread.java:1474)
> Process finished with exit code -1073740771 (0xC000041D)
Simple reproducer, just press ALT+ENTER:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class FullScreenBug {
public static void main(String[] args) {
Application.launch(FxApp.class, args);
}
public static class FxApp extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane();
Scene scene = new Scene(root, 1280, 540);
primaryStage.setScene(scene);
primaryStage.show();
}
}
}
Note: This behavior can be disabled in DXGI. Godot did that for example, can be seen here: https://github.com/godotengine/godot/blob/master/drivers/d3d12/rendering_device_driver_d3d12.cpp#L2852
The exception, that will also lead to a crash:
java.lang.NullPointerException: D3D12 swapchain is NULL
at javafx.graphics@25-direct3d12/com.sun.prism.d3d12.D3D12SwapChain.<init>(D3D12SwapChain.java:66)
at javafx.graphics@25-direct3d12/com.sun.prism.d3d12.D3D12SwapChain.create(D3D12SwapChain.java:78)
at javafx.graphics@25-direct3d12/com.sun.prism.d3d12.D3D12ResourceFactory.createPresentable(D3D12ResourceFactory.java:338)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:81)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545)
at java.base/java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:369)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java)
at --- Async.Stack.Trace --- (captured by IntelliJ IDEA debugger)
at java.base/java.util.concurrent.FutureTask.<init>(FutureTask.java:153)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.RenderJob.<init>(RenderJob.java:45)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.PaintCollector.lambda$liveRepaintRenderJob$2(PaintCollector.java:330)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.PaintCollector.liveRepaintRenderJob(PaintCollector.java:329)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.GlassViewEventHandler$ViewEventNotification.get(GlassViewEventHandler.java:810)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.GlassViewEventHandler$ViewEventNotification.get(GlassViewEventHandler.java:770)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
at javafx.graphics@25-direct3d12/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleViewEvent(GlassViewEventHandler.java:850)
at javafx.graphics@25-direct3d12/com.sun.glass.ui.View.handleViewEvent(View.java:543)
at javafx.graphics@25-direct3d12/com.sun.glass.ui.View.notifyResize(View.java:884)
at javafx.graphics@25-direct3d12/com.sun.glass.ui.win.WinView.notifyResize(WinView.java:91)
at javafx.graphics@25-direct3d12/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics@25-direct3d12/com.sun.glass.ui.win.WinApplication.lambda$runLoop$0(WinApplication.java:168)
at java.base/java.lang.Thread.run(Thread.java:1474)
> Process finished with exit code -1073740771 (0xC000041D)
Simple reproducer, just press ALT+ENTER:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class FullScreenBug {
public static void main(String[] args) {
Application.launch(FxApp.class, args);
}
public static class FxApp extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane();
Scene scene = new Scene(root, 1280, 540);
primaryStage.setScene(scene);
primaryStage.show();
}
}
}