On Fri, 12 Jan 2024 14:11:14 GMT, Lukasz Kostyra <lkost...@openjdk.org> wrote:
> 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. modules/javafx.graphics/src/main/java/javafx/scene/Scene.java line 1364: > 1362: // Grab the lights from the scene and/or subscene > 1363: context.lights = null; > 1364: int totalLightCount = 0; 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); ------------- PR Review Comment: https://git.openjdk.org/jfx/pull/1332#discussion_r1452752285