[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    RFR: 8322544 Parts of SG no longer update during rendering - overlapping - culling - dirty
From:       Florian Kirmaier <fkirmaier () openjdk ! org>
Date:       2023-12-21 12:38:57
Message-ID: sizOHn5bjorTGLngEidSm0-gMLmqUBvaV1VcdOLjoRE=.ea4b54b9-c20f-4fd0-9602-340e38f23d4c () github ! com
[Download RAW message or body]

In some situations, a part of the SG is no longer rendered.
I created a test program that showcases this problem.

Explanation:

This can happen, when a part of the SG, is covered by another Node.
In this part, one node is totally covered, and the other node is visible.

When the totally covered Node is changed, then it is marked dirty and it's parent, \
recursively until an already dirty node is found. Due to the Culling, this totally \
covered Node is not rendered - with the effect that the tree is never marked as \
Clean.

In this state, a Node is Dirty but not It's parent. Based on my CodeReview, this is \
an invalid state which should never happen.

In this invalid state, when the other Node is changed, which is visible, then the \
dirty state is no longer propagated upwards - because the recursive \
"NGNode.markTreeDirty" algorithm encounters a dirty node early.

This has the effect, that any SG changes in the visible Node are no longer rendered. \
Sometimes the situation repairs itself.

Useful parameters for further investigations:
-Djavafx.pulseLogger=true
-Dprism.printrendergraph=true
-Djavafx.pulseLogger.threshold=0

PR:
This PR ensures the dirty flag is set to false of the tree when the culling is used.
It doesn't seem to break any existing tests - but I'm not sure whether this is the \
right way to fix it. It would be great to have some feedback on this solution - maybe \
guiding me to a better solution.

I could write a test, that just does the same thing as the test application, but \
checks every frame that these nodes are not dirty - but maybe there is a better way \
to test this.

-------------

Commit messages:
 - JDK-8322544

Changes: https://git.openjdk.org/jfx/pull/1310/files
 Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1310&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8322544
  Stats: 1 line in 1 file changed: 1 ins; 0 del; 0 mod
  Patch: https://git.openjdk.org/jfx/pull/1310.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1310/head:pull/1310

PR: https://git.openjdk.org/jfx/pull/1310


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic