M5.6: a zoomed view with Dehaze keeps its airlight proxy (each pan and slider step resampled the whole original)

A windowed render dehazes with the whole frame's airlight, estimated on a 384 px proxy of the frame
(`local::frame_airlight`). Every window asked for that proxy again, so every pan of a 1:1 view and every
slider step while zoomed sampled the whole original down to it on the CPU: ~200 ms of CPU on a 64 MP raw.

The proxy (taken before white balance) is now kept for the last 4 (source fingerprint, frame, size); white
balance, the dark channel and the percentile still run on it every time. Same pixels: the GPU window of
`render_bench` is byte-identical.

`optics::fingerprint` indexed the first pixel of an empty image; it now hashes only the dimensions then.

render_bench ONLY=window GPU_ONLY=1 on a 64 MP Sony ILCE-7RM6 raw (RTX 4070 Ti SUPER, 4-CPU quota), CPU time:
pan 208-212 -> 9-11 ms, exposure change 200-204 -> 4 ms, NR change 211-217 -> 13 ms.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
dev-null-undefined
2026-10-13 13:07:34 +02:00
co-authored by Claude
parent b3d392b499
commit e7cd00ef56
4 changed files with 69 additions and 4 deletions
+4
View File
@@ -8,6 +8,10 @@
previews for up to a second.
- A thumbnail of the photo open in Detail is made from its already decoded preview instead of decoding the file
again.
### Dehaze while zoomed in
- With Dehaze on, panning a photo zoomed to 1:1 or moving a slider while zoomed no longer samples the whole
original again to find the haze colour. On a 64 MP raw (Sony A7R VI) that took ~0.2 s of CPU per pan and per
slider step; a slider step now takes ~5 ms on the GPU.
## 2026-10-12
### Canon CR2 highlights