Bad DropShadow performance
Dirk Lemmermann
dlemmermann at gmail.com
Thu Oct 4 18:32:31 UTC 2018
Yes, I also noticed that DropShadow causes severe performance degradation.
Dirk
> On 4 Oct 2018, at 13:10, Tom Schindl <tom.schindl at bestsolution.at> wrote:
>
> Hi,
>
> Why does applying a DropShadow on a large region cause problem when
> animating nodes contained in that region?
>
>> package fxbugs;
>>
>> import javafx.animation.ScaleTransition;
>> import javafx.application.Application;
>> import javafx.geometry.Insets;
>> import javafx.scene.Node;
>> import javafx.scene.Scene;
>> import javafx.scene.control.Button;
>> import javafx.scene.effect.BlurType;
>> import javafx.scene.effect.DropShadow;
>> import javafx.scene.layout.BorderPane;
>> import javafx.scene.layout.GridPane;
>> import javafx.scene.paint.Color;
>> import javafx.stage.Stage;
>> import javafx.util.Duration;
>>
>> public class DropShadowPerformance extends Application {
>>
>> @Override
>> public void start(Stage primaryStage) throws Exception {
>> BorderPane p = new BorderPane();
>> p.setPadding(new Insets(30));
>>
>> GridPane container = new GridPane();
>> container.setHgap(10);
>> container.setVgap(10);
>> container.setStyle("-fx-background-color: green; -fx-padding: 10;");
>> container.setEffect(new DropShadow(BlurType.GAUSSIAN, Color.rgb(0, 0, 0, 0.3), 10, 0.5, 0, 0));
>> for( int i = 0; i < 8; i++ ) {
>> for( int j = 0; j < 14; j++ ) {
>> container.add(createButton(), i, j);
>> }
>> }
>> p.setCenter(container);
>>
>> Scene s = new Scene(p, 800, 600);
>> primaryStage.setScene(s);
>> primaryStage.show();
>> }
>>
>> private Node createButton() {
>> Button button = new Button("hello world");
>> button.hoverProperty().addListener((ob,ol,ne) -> {
>> ScaleTransition t = new ScaleTransition(Duration.millis(500), button);
>>
>> if( ne ) {
>> t.setFromX(1);
>> t.setFromY(1);
>> t.setToX(1.2);
>> t.setToY(1.2);
>> } else {
>> t.setFromX(1.2);
>> t.setFromY(1.2);
>> t.setToX(1);
>> t.setToY(1);
>> }
>>
>> t.play();
>> });
>> return button;
>> }
>>
>> public static void main(String[] args) {
>> launch(args);
>> }
>> }
>
>
> If you run the following application:
> * Maximize the window
> * Hover over a button (eg the one in the right lower corner)
>
> You'll notice that the animation is not smooth, setting cache flags on
> the container does not improve the situation, nor does using a ONE_PASS_BOX.
>
> Removing the effect on the container node "fixes" the problem.
>
> This is on a MacBook Pro and Windows Surface both having a Intel Iris
> Plus 650 graphics card.
>
> Tom
>
> --
> Tom Schindl, CTO
> BestSolution.at EDV Systemhaus GmbH
> Eduard-Bodem-Gasse 5-7. A-6020 Innsbruck
> Reg. Nr. FN 222302s am Firmenbuchgericht Innsbruck
More information about the openjfx-dev
mailing list