mirror of
https://github.com/italicsjenga/vello.git
synced 2025-01-09 20:31:29 +11:00
b103a55301
Adds full support for COLRv1 radial gradients based on the two-point conical gradient algorithm at https://skia.org/docs/dev/design/conical/ Also adds robustness to degenerate cases in gradient encoding: * Radial where p0 == p1 && r0 == r1 renders transparent solid * Empty stops render as transparent solid * Single stop renders as solid
47 lines
1.4 KiB
WebGPU Shading Language
47 lines
1.4 KiB
WebGPU Shading Language
// SPDX-License-Identifier: Apache-2.0 OR MIT OR Unlicense
|
|
|
|
// The DrawMonoid is computed as a prefix sum to aid in decoding
|
|
// the variable-length encoding of draw objects.
|
|
struct DrawMonoid {
|
|
// The number of paths preceding this draw object.
|
|
path_ix: u32,
|
|
// The number of clip operations preceding this draw object.
|
|
clip_ix: u32,
|
|
// The offset of the encoded draw object in the scene (u32s).
|
|
scene_offset: u32,
|
|
// The offset of the associated info.
|
|
info_offset: u32,
|
|
}
|
|
|
|
// Each draw object has a 32-bit draw tag, which is a bit-packed
|
|
// version of the draw monoid.
|
|
let DRAWTAG_NOP = 0u;
|
|
let DRAWTAG_FILL_COLOR = 0x44u;
|
|
let DRAWTAG_FILL_LIN_GRADIENT = 0x114u;
|
|
let DRAWTAG_FILL_RAD_GRADIENT = 0x29cu;
|
|
let DRAWTAG_FILL_IMAGE = 0x248u;
|
|
let DRAWTAG_BEGIN_CLIP = 0x9u;
|
|
let DRAWTAG_END_CLIP = 0x21u;
|
|
|
|
fn draw_monoid_identity() -> DrawMonoid {
|
|
return DrawMonoid();
|
|
}
|
|
|
|
fn combine_draw_monoid(a: DrawMonoid, b: DrawMonoid) -> DrawMonoid {
|
|
var c: DrawMonoid;
|
|
c.path_ix = a.path_ix + b.path_ix;
|
|
c.clip_ix = a.clip_ix + b.clip_ix;
|
|
c.scene_offset = a.scene_offset + b.scene_offset;
|
|
c.info_offset = a.info_offset + b.info_offset;
|
|
return c;
|
|
}
|
|
|
|
fn map_draw_tag(tag_word: u32) -> DrawMonoid {
|
|
var c: DrawMonoid;
|
|
c.path_ix = u32(tag_word != DRAWTAG_NOP);
|
|
c.clip_ix = tag_word & 1u;
|
|
c.scene_offset = (tag_word >> 2u) & 0x07u;
|
|
c.info_offset = (tag_word >> 6u) & 0x0fu;
|
|
return c;
|
|
}
|