diff --git a/wrench/reftests/mask/checkerboard-tiling.yaml b/wrench/reftests/mask/checkerboard-tiling.yaml new file mode 100644 index 0000000000..e6b348d09f --- /dev/null +++ b/wrench/reftests/mask/checkerboard-tiling.yaml @@ -0,0 +1,14 @@ +--- +root: + items: + - type: clip + bounds: [0, 0, 200, 200] + image-mask: + image: transparent-checkerboard(2, 16, 16) + rect: [0, 0, 200, 200] + repeat: false + tile-size: 37 # Intentional + items: + - type: rect + bounds: [0, 0, 200, 200] + color: blue diff --git a/wrench/reftests/mask/checkerboard.png b/wrench/reftests/mask/checkerboard.png new file mode 100644 index 0000000000..e8a05df95b Binary files /dev/null and b/wrench/reftests/mask/checkerboard.png differ diff --git a/wrench/reftests/mask/checkerboard.yaml b/wrench/reftests/mask/checkerboard.yaml new file mode 100644 index 0000000000..980bdb13fe --- /dev/null +++ b/wrench/reftests/mask/checkerboard.yaml @@ -0,0 +1,13 @@ +--- +root: + items: + - type: clip + bounds: [0, 0, 200, 200] + image-mask: + image: transparent-checkerboard(2, 16, 16) + rect: [0, 0, 200, 200] + repeat: false + items: + - type: rect + bounds: [0, 0, 200, 200] + color: blue diff --git a/wrench/reftests/mask/reftest.list b/wrench/reftests/mask/reftest.list index 912e43022d..b060fb9f06 100644 --- a/wrench/reftests/mask/reftest.list +++ b/wrench/reftests/mask/reftest.list @@ -11,3 +11,5 @@ platform(linux,mac) fuzzy(1,8750) == mask-atomicity.yaml mask-atomicity-ref.yaml platform(linux,mac) fuzzy(1,8750) == mask-atomicity-tiling.yaml mask-atomicity-ref.yaml == mask-perspective.yaml mask-perspective.png == mask-perspective-tiling.yaml mask-perspective.yaml +== checkerboard.yaml checkerboard.png +== checkerboard.yaml checkerboard-tiling.yaml diff --git a/wrench/src/yaml_frame_reader.rs b/wrench/src/yaml_frame_reader.rs index 9fab99cf76..fd8ca15b94 100644 --- a/wrench/src/yaml_frame_reader.rs +++ b/wrench/src/yaml_frame_reader.rs @@ -72,12 +72,18 @@ fn broadcast(base_vals: &[T], num_items: usize) -> Vec { vals } +enum CheckerboardKind { + BlackGrey, + BlackTransparent, +} + fn generate_checkerboard_image( border: u32, tile_x_size: u32, tile_y_size: u32, tile_x_count: u32, tile_y_count: u32, + kind: CheckerboardKind, ) -> (ImageDescriptor, ImageData) { let width = 2 * border + tile_x_size * tile_x_count; let height = 2 * border + tile_y_size * tile_y_count; @@ -94,11 +100,22 @@ fn generate_checkerboard_image( } else { let xon = ((x - border) % (2 * tile_x_size)) < tile_x_size; let yon = ((y - border) % (2 * tile_y_size)) < tile_y_size; - let value = if xon ^ yon { 0xff } else { 0x7f }; - pixels.push(value); - pixels.push(value); - pixels.push(value); - pixels.push(0xff); + match kind { + CheckerboardKind::BlackGrey => { + let value = if xon ^ yon { 0xff } else { 0x7f }; + pixels.push(value); + pixels.push(value); + pixels.push(value); + pixels.push(0xff); + } + CheckerboardKind::BlackTransparent => { + let value = if xon ^ yon { 0xff } else { 0x00 }; + pixels.push(value); + pixels.push(value); + pixels.push(value); + pixels.push(value); + } + } } } } @@ -476,7 +493,8 @@ impl YamlFrameReader { args.get(4).unwrap_or(&"1000").parse::().unwrap(), args.get(5).unwrap_or(&"1000").parse::().unwrap(), ), - ("checkerboard", args, _) => { + (name @ "transparent-checkerboard", args, _) | + (name @ "checkerboard", args, _) => { let border = args.get(0).unwrap_or(&"4").parse::().unwrap(); let (x_size, y_size, x_count, y_count) = match args.len() { @@ -497,12 +515,19 @@ impl YamlFrameReader { } }; + let kind = if name == "transparent-checkerboard" { + CheckerboardKind::BlackTransparent + } else { + CheckerboardKind::BlackGrey + }; + generate_checkerboard_image( border, x_size, y_size, x_count, y_count, + kind, ) } _ => {