JavaFX-“无点”(CSS)阴影效果,大大降低了图形性能

问题描述 投票:0回答:1

Hello, People [...]

🤔摘要

  • [每当我在Shadow-effect或任何组件/控件/元素上使用BorderPane时,3D图形性能(如在下面的[[Preview部分中看到的]]都变得太低了。

  • “令人困惑”

  • 部分是,当效果应用与我的Tab,Subscene甚至是移动的Button无关时,它甚至会降低性能。 ,以一种方式 [...]
  • 我使用jdk-12.0.1

👁️预览

demonstration / Preview .GIF

⚠️重现问题

所需文件:

App.java |main.fxml|AnchorPane.css|MathUtils.java| SimpleFPSCamera.java

📝通用代码

((有关更多信息,您也可以参考重新创建问题

部分)
AnchorPane.css

#BorderPane1 { -fx-effect: dropshadow(three-pass-box, rgb(26, 26, 26), 50, 0.6, 0, 0); /* Comment it*/ }

App.java

public class App extends Application { @FXML public Parent root; public TabPane TabPane1; public BorderPane BorderPane1; public static void main(String[] args) throws Exception { launch(args); } @Override public void start(Stage primaryStage) throws Exception { FXMLLoader loader = new FXMLLoader(getClass().getResource("main.fxml")); loader.setController(this); root = loader.load(); Scene RootScene = new Scene(root, 1120, 540); primaryStage.setScene(RootScene); Thread t = new Thread() { public void run() { //Setting NewButton2 Button NewButton2 = new Button(); NewButton2.setId("Button2"); NewButton2.setText("test2"); NewButton2.setPrefWidth(150); NewButton2.setPrefHeight(50); NewButton2.setTranslateX(-75); NewButton2.setTranslateY(-25); NewButton2.setTranslateZ(900); // Setting group Group SubRootGroup = new Group(NewButton2); SubRootGroup.setTranslateX(0); SubRootGroup.setTranslateY(0); SubRootGroup.setTranslateZ(0); // Setting Scene SubScene SubScene1 = new SubScene(SubRootGroup, 0, 0, true, SceneAntialiasing.BALANCED); SubScene1.setId("SubScene1"); SubScene1.setFill(Color.WHITE); SubScene1.heightProperty().bind(RootScene.heightProperty()); SubScene1.widthProperty().bind(RootScene.widthProperty()); // Initializing Camera SimpleFPSCamera SimpleFPSCam = new SimpleFPSCamera(); // Setting Camera To The Scene SubScene1.setCamera(SimpleFPSCam.getCamera()); // Adding Scene To Stage-TabPane.Tab(0) TabPane1.getTabs().add(new Tab("Without Shadows")); TabPane1.getTabs().get(0).setContent(SubScene1); // Loading Mouse & Keyboard Events SimpleFPSCam.loadControlsForSubScene(SubScene1); } }; t.setDaemon(true); t.run(); primaryStage.show(); } }

直到现在我一直在尝试的事物

  • setCache(true); setCacheShape(true); setCacheHint(CacheHint.SPEED);

    (我尝试过将其与所有组件一起使用均未获得成功[这可能也是我对JavaFX的较差知识,[以错误的方式使用它?]]]

      ...
  • 💛Outro

    任何想法?在此先感谢,我们将不胜感激任何帮助,💛[...]乔治。

  • javafx graphics shadow javafx-3d javafx-css
    1个回答
    0
    投票
    [大概,您现在可能已经知道了,但是由于我过去也曾为此问题竭尽全力,所以您的回答是:

    投影效果很“贵”,绘制效果很慢。如果在具有许多后代的节点上使用它并移动任何后代,这将导致在父级上重新计算效果,因此整个动画会变慢(无论父级本身是否设置了动画)。] >

    我通过使用StackPane作为最顶层的容器来解决此问题,在其中向我添加了Pane作为第一个孩子(具有css下拉阴影效果),而将实际控件的普通顶层容器作为第二个孩子孩子。

    这样,当某些内容在布局树中向下移动时,“阴影”窗格不会更新,瞧,您具有有效的阴影效果,而不会影响性能:-)

    © www.soinside.com 2019 - 2024. All rights reserved.