mirror of
https://github.com/storytold/photocraft.git
synced 2026-11-12 00:49:14 -06:00
* Blend modes: Fill below 100% works inside the blend for Photoshop's special eight In Photoshop, Fill and Opacity are the same for most blend modes, but not for eight: Color Burn, Linear Burn, Color Dodge, Linear Dodge (Add), Vivid Light, Linear Light, Hard Mix and Difference. PhotoCraft treated Fill as Opacity for all of them, so a Difference layer at 50% Fill gave (150,90,110) where Photoshop gives (150,60,10). Measured on Photoshop 27.11 (scripted, 24 cases at Fill 25/50/75% with two colour pairs): below 100% Fill, Photoshop pulls the layer's colour toward the mode's neutral colour (black for Color Dodge, Linear Dodge, Difference; white for Color Burn, Linear Burn; 50% gray for Vivid and Linear Light) and blends that at full strength; Hard Mix becomes clamp((b - f(1 - t)) / (1 - f)). Opacity still mixes the result in. That reproduces 31 of 32 values within 1 level (Hard Mix at 75%: 3). CPU (psblend::composite_fill, the final blend of plain pixel, shape and type layers) and GPU (Kernel::Blend takes Fill in the spare uniform slot) agree; Dissolve keeps Fill as coverage. Layers with effects, adjustment layers and groups keep the old behaviour for now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * GPU: composite_fill with a single blend_rgb call, so fs_blend stays small The first version added a third inlined copy of blend_rgb (every blend mode) to fs_blend: composite_g's two plus blend_rgb_fill's. Windows CI (software WARP adapter) then timed out rendering the UI in arbitrary_rotation_preview, which passes on main; a larger shader compiles noticeably slower there. composite_fill now handles every case itself with one blend_rgb call (Fill as coverage for normal modes, the special-eight blend, Lab Normal mixing, the text gamma space) and is fs_blend's only composite path, leaving it with fewer inlined copies than on main. Same results: the 35 GPU parity tests pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>