On Sun, 6 Oct 2024 12:03:02 GMT, Michael Strauß <mstra...@openjdk.org> wrote:
>> When creating a Scene, a `DrawableInfo` is allocated with `malloc`. When >> scene changes, this is called on `WindowStage.java`: >> >> `QuantumRenderer.getInstance().disposePresentable(painter.presentable); // >> latched on RT` >> >> But the underlying `DrawableInfo` is never freed. >> >> I also think this should be done when the Stage is closed. >> >> To test: >> >> import javafx.animation.Animation; >> import javafx.animation.KeyFrame; >> import javafx.animation.KeyValue; >> import javafx.animation.Timeline; >> import javafx.application.Application; >> import javafx.scene.Scene; >> import javafx.scene.control.TextField; >> import javafx.scene.control.Label; >> import javafx.scene.layout.Pane; >> import javafx.scene.layout.StackPane; >> import javafx.scene.layout.VBox; >> import javafx.scene.paint.Color; >> import javafx.stage.Stage; >> import javafx.util.Duration; >> >> public class TestScenes extends Application { >> >> @Override >> public void start(Stage stage) { >> Timeline timeline = new Timeline( >> new KeyFrame(Duration.millis(100), e -> >> stage.setScene(createScene("Scene 1", Color.RED))), >> new KeyFrame(Duration.millis(200), e -> >> stage.setScene(createScene("Scene 2", Color.BLUE))), >> new KeyFrame(Duration.millis(300), e -> >> stage.setScene(createScene("Scene 3", Color.GREEN))) >> ); >> >> timeline.setCycleCount(Animation.INDEFINITE); >> timeline.play(); >> >> stage.show(); >> } >> >> private Scene createScene(String text, Color color) { >> return new Scene(new StackPane(), 400, 300, color); >> } >> >> public static void main(String[] args) { >> launch(TestScenes.class, args); >> } >> } > > modules/javafx.graphics/src/main/java/com/sun/prism/es2/ES2SwapChain.java > line 193: > >> 191: @Override >> 192: public ES2Graphics createGraphics() { >> 193: if (drawable == null || drawable.getNativeWindow() != >> pState.getNativeWindow()) { > > The null check wasn't here before, and it doesn't seem necessary as > `createGLDrawable()` does not return `null`. But drawable can now be disposed and set to null. If that happens and `createGraphics` is called again it will end in a NPE. ------------- PR Review Comment: https://git.openjdk.org/jfx/pull/1586#discussion_r1789213796