RFR: 8260013: Snapshot does not work for nodes in a subscene [v2]
Lukasz Kostyra
lkostyra at openjdk.org
Thu Jan 18 15:33:52 UTC 2024
On Mon, 15 Jan 2024 21:25:57 GMT, Michael Strauß <mstrauss at openjdk.org> wrote:
>> Lukasz Kostyra has updated the pull request incrementally with one additional commit since the last revision:
>>
>> doSnapshot: Replace light accumulation code
>>
>> Uses suggested simpler implementation using Java's Streams.
>>
>> Needed an additional check in NGShape3D, otherwise IndexOutOfBounds was
>> thrown
>
> 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);
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.
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1332#discussion_r1457610923
More information about the openjfx-dev
mailing list