On Thu, 11 Feb 2021 00:17:10 GMT, Kevin Rushforth <k...@openjdk.org> wrote:
>> I moved it to Draft before noticing that there were additional commits after >> your last comment that I had missed seeing earlier, so I moved it back to >> RFR. > > This is a good starting point, but it will need additional work, possibly in > the native D3D code as well as on the Java side, to fully cleanup and > recreate all of the resources after the device is recreated. As discussed > offline, I'll take a stab at this using your PR as a starting point. > > I ran some tests this afternoon. It does detect that the devide was removed, > and the disposes and recreates the device, but then it has problem drawing > anything with a texture; it throws an exception and there are rendering > artifacts: > > KCR: create resource factor for screen 0 > D3DContext::testCooperativeLevel > D3DContext::testCooperativeLevel > D3DContext::testCooperativeLevel > D3DContext::testCooperativeLevel > D3DContext::testCooperativeLevel > KCR: D3DERR_DEVICEREMOVED > KCR: dispose graphics pipeline > KCR: instance is null: reinitialize D3DPipeline > Exception in thread "JavaFX Application Thread" > java.lang.NullPointerException: Cannot invoke > "com.sun.prism.GraphicsPipeline.is3DSupported()" because the return value of > "com.sun.prism.GraphicsPipeline.getPipeline()" is null > at > javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.isSupported(QuantumToolkit.java:1209) > at > javafx.graphics/com.sun.javafx.application.PlatformImpl.isSupportedImpl(PlatformImpl.java:979) > at > javafx.graphics/com.sun.javafx.application.PlatformImpl.isSupported(PlatformImpl.java:646) > at > javafx.graphics/javafx.application.Platform.isSupported(Platform.java:262) > at > javafx.graphics/com.sun.javafx.scene.input.PickResultChooser.processOffer(PickResultChooser.java:182) > at > javafx.graphics/com.sun.javafx.scene.input.PickResultChooser.offer(PickResultChooser.java:143) > at javafx.graphics/javafx.scene.Node.intersects(Node.java:5229) > at javafx.graphics/javafx.scene.Node$1.intersects(Node.java:553) > at > javafx.graphics/com.sun.javafx.scene.NodeHelper.intersects(NodeHelper.java:258) > at > javafx.graphics/javafx.scene.layout.Region.doPickNodeLocal(Region.java:3227) > ... > at javafx.graphics/javafx.scene.Scene.pick(Scene.java:2031) > at > javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3810) > at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1851) > at > javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2584) > at > javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409) > at > javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299) > at > java.base/java.security.AccessController.doPrivileged(AccessController.java:391) > at > javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447) > at > javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:413) > at > javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446) > at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556) > at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942) > at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native > Method) > at > javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) > at java.base/java.lang.Thread.run(Thread.java:832) > ... > KCR: create resource factor for screen 0 > D3DContext::testCooperativeLevel > D3DContext::testCooperativeLevel > KCR: dispose graphics pipeline >  I created PR #403 using this as a starting point, so I am moving this PR back to draft (and it probably can be closed). ------------- PR: https://git.openjdk.java.net/jfx/pull/315