Keep only where two selections agree, as a third way to join a mask part
A layer's parts could be added to the mask or taken out of it, and nothing else. The selections that need composing most are the ones that are neither: the sky that is also bright, the subject that is also skin. With union and subtract alone, "this and that" had to be spelled as "this minus everything that is not that", which needs a second part that selects the complement and rarely exists. Join gains Intersect, stored as "intersect" in the part block of a sidecar. It is the product of the two coverages, dst * src, which is one more fixed-function blend state beside union's max and subtract's dst * (1 - src) (mask-editing.md 5.2): the same scratch texture, the same three vertices, no shader arithmetic. The product equals the minimum wherever either side is fully in or out, and is the softer reading where two soft edges overlap. Join::apply spells the three operations on the CPU so the GPU tests can be held to one definition. A layer that intersects with a part covering nothing now reports that it covers nothing, so it is not rasterised as an empty slice. Old sidecars never contain the word, so they read as before; a build from before this reads "intersect" as a union, the existing unknown-join fallback, which keeps the part visible rather than dropping it. Join::ALL keeps union and subtract at indices 0 and 1 so a stored panel index still means the same join.
This commit is contained in:
@@ -162,6 +162,13 @@ pub const GESTURES: &[Gesture] = &[
|
||||
pointer: "Click the eye on its row",
|
||||
keys: "",
|
||||
},
|
||||
Gesture {
|
||||
title: "Change how a part joins its mask",
|
||||
section: "Develop",
|
||||
touch: "Tap the + / − / ∩ chip on the part's row",
|
||||
pointer: "Click the + / − / ∩ chip on the part's row",
|
||||
keys: "",
|
||||
},
|
||||
Gesture {
|
||||
title: "Leave one part out of a mask, and put it back",
|
||||
section: "Develop",
|
||||
|
||||
Reference in New Issue
Block a user