-
Notifications
You must be signed in to change notification settings - Fork 476
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
8260013: Snapshot does not work for nodes in a subscene #1332
Conversation
👋 Welcome back lkostyra! A progress list of the required criteria for merging this PR into |
Webrevs
|
/reviewers 2 |
@kevinrushforth |
context.lights = new NGLightBase[scene.lights.size()]; | ||
for (int i = 0; i < scene.lights.size(); i++) { | ||
context.lights[i] = scene.lights.get(i).getPeer(); | ||
int totalLightCount = 0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here's a suggestion: you might be able to replace all of the new code, including the accumulateLightsForSnapshot
method, with the following shorter code:
Stream<NGLightBase> lights = Stream.concat(
Optional.ofNullable(scene).stream().flatMap(s -> s.lights.stream()).map(LightBase::getPeer),
Optional.ofNullable(subScene).stream().flatMap(s -> s.getLights().stream()).map(LightBase::getPeer));
context.lights = lights.toArray(NGLightBase[]::new);
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I changed the code as suggested.
After that Snapshot3DTest code started showing some failures, this was due to NGShape3D code not checking if it gets an empty (length == 0) array and throwing IndexOutOfBoundsException
. I patched that as well and didn't see any regressions in tests afterwards.
Uses suggested simpler implementation using Java's Streams. Needed an additional check in NGShape3D, otherwise IndexOutOfBounds was thrown
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks mostly correct except for the case where both the Scene and the SubScene have lights. It seems worth adding a test for this case as well.
Snapshot now includes lights only from subScene if it is not null, which matches how SubScenes are rendered
Corrected the behavior and added a test as well |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good. I left a few minor cleanup comments. I'll reapprove when/if you fix them.
tests/system/src/test/java/test/javafx/scene/SnapshotLightsTest.java
Outdated
Show resolved
Hide resolved
tests/system/src/test/java/test/javafx/scene/SnapshotLightsTest.java
Outdated
Show resolved
Hide resolved
tests/system/src/test/java/test/javafx/scene/SnapshotLightsTest.java
Outdated
Show resolved
Hide resolved
Cleanup done, should be all OK now |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good!
@lukostyra This change now passes all automated pre-integration checks. ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details. After integration, the commit message for the final commit will be:
You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed. At the time when this comment was updated there had been 23 new commits pushed to the
As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details. ➡️ To integrate this PR with the above commit message to the |
/integrate |
Going to push as commit d653a31.
Your commit was automatically rebased without conflicts. |
@lukostyra Pushed as commit d653a31. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. |
Originally this issue showed the problem of Node being incorrectly rendered (clipped) when snapshotting, compared to a snapshot of the whole Scene. Later on there was another problem added - lights not being taken into account if they are added to a SubScene.
As it later turned out, the original problem from this bug report is a problem with ParallelCamera incorrectly estimating near/far clipping planes, which just happened to reveal itself while snapshotting a Node. During testing I found out you can make the Node clip regardless of snapshot mechanism. Clipping issue was moved to a separate bug report and this PR only fixes the inconsistency in lights being gathered for a snapshot.
Scene.doSnapshot()
was expanded to also check if SubScene provided to it is non-null and to fetch lights assigned to it. Scenario was tested with added SnapshotLightsTest.Rest of the tests were checked and don't produce any noticeable regressions.
Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jfx.git pull/1332/head:pull/1332
$ git checkout pull/1332
Update a local copy of the PR:
$ git checkout pull/1332
$ git pull https://git.openjdk.org/jfx.git pull/1332/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 1332
View PR using the GUI difftool:
$ git pr show -t 1332
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jfx/pull/1332.diff
Webrev
Link to Webrev Comment