Skip to content

Commit 96eda2e

Browse files
committed
std/etc2: support transparency
1 parent 2d80615 commit 96eda2e

7 files changed

+627
-81
lines changed

internal/cgen/base/pixconv-submodule-regular.c

+103
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,10 @@ wuffs_base__pixel_buffer__set_color_u32_at(
250250
wuffs_base__color_u32_argb_premul__as__color_u64_argb_nonpremul(
251251
color));
252252
break;
253+
case WUFFS_BASE__PIXEL_FORMAT__BGRA_BINARY:
254+
wuffs_base__poke_u32le__no_bounds_check(
255+
row + (4 * ((size_t)x)), (color >> 31) ? (color | 0xFF000000) : 0);
256+
break;
253257

254258
case WUFFS_BASE__PIXEL_FORMAT__RGB:
255259
wuffs_base__poke_u24le__no_bounds_check(
@@ -5693,6 +5697,100 @@ wuffs_private_impl__pixel_swizzler__prepare__bgra_premul(
56935697
return NULL;
56945698
}
56955699

5700+
static inline WUFFS_BASE__FORCE_INLINE wuffs_base__pixel_swizzler__func //
5701+
wuffs_private_impl__pixel_swizzler__prepare__bgra_binary(
5702+
wuffs_base__pixel_swizzler* p,
5703+
wuffs_base__pixel_format dst_pixfmt,
5704+
wuffs_base__slice_u8 dst_palette,
5705+
wuffs_base__slice_u8 src_palette,
5706+
wuffs_base__pixel_blend blend) {
5707+
switch (dst_pixfmt.repr) {
5708+
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
5709+
switch (blend) {
5710+
case WUFFS_BASE__PIXEL_BLEND__SRC:
5711+
return wuffs_private_impl__swizzle_bgr_565__bgra_premul__src;
5712+
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
5713+
return wuffs_private_impl__swizzle_bgr_565__bgra_premul__src_over;
5714+
}
5715+
return NULL;
5716+
5717+
case WUFFS_BASE__PIXEL_FORMAT__BGR:
5718+
switch (blend) {
5719+
case WUFFS_BASE__PIXEL_BLEND__SRC:
5720+
return wuffs_private_impl__swizzle_bgr__bgra_premul__src;
5721+
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
5722+
return wuffs_private_impl__swizzle_bgr__bgra_premul__src_over;
5723+
}
5724+
return NULL;
5725+
5726+
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
5727+
switch (blend) {
5728+
case WUFFS_BASE__PIXEL_BLEND__SRC:
5729+
return wuffs_private_impl__swizzle_copy_4_4;
5730+
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
5731+
return wuffs_private_impl__swizzle_bgra_nonpremul__bgra_premul__src_over;
5732+
}
5733+
return NULL;
5734+
5735+
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
5736+
switch (blend) {
5737+
case WUFFS_BASE__PIXEL_BLEND__SRC:
5738+
return wuffs_private_impl__swizzle_bgra_nonpremul_4x16le__bgra_premul__src;
5739+
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
5740+
return wuffs_private_impl__swizzle_bgra_nonpremul_4x16le__bgra_premul__src_over;
5741+
}
5742+
return NULL;
5743+
5744+
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
5745+
case WUFFS_BASE__PIXEL_FORMAT__BGRA_BINARY:
5746+
switch (blend) {
5747+
case WUFFS_BASE__PIXEL_BLEND__SRC:
5748+
return wuffs_private_impl__swizzle_copy_4_4;
5749+
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
5750+
return wuffs_private_impl__swizzle_bgra_premul__bgra_premul__src_over;
5751+
}
5752+
return NULL;
5753+
5754+
case WUFFS_BASE__PIXEL_FORMAT__RGB:
5755+
switch (blend) {
5756+
case WUFFS_BASE__PIXEL_BLEND__SRC:
5757+
return wuffs_private_impl__swizzle_bgr__rgba_premul__src;
5758+
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
5759+
return wuffs_private_impl__swizzle_bgr__rgba_premul__src_over;
5760+
}
5761+
return NULL;
5762+
5763+
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
5764+
switch (blend) {
5765+
case WUFFS_BASE__PIXEL_BLEND__SRC:
5766+
#if defined(WUFFS_PRIVATE_IMPL__CPU_ARCH__X86_64_V2)
5767+
if (wuffs_base__cpu_arch__have_x86_sse42()) {
5768+
return wuffs_private_impl__swizzle_swap_rgbx_bgrx__x86_sse42;
5769+
}
5770+
#endif
5771+
return wuffs_private_impl__swizzle_swap_rgbx_bgrx;
5772+
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
5773+
return wuffs_private_impl__swizzle_bgra_nonpremul__rgba_premul__src_over;
5774+
}
5775+
return NULL;
5776+
5777+
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
5778+
switch (blend) {
5779+
case WUFFS_BASE__PIXEL_BLEND__SRC:
5780+
#if defined(WUFFS_PRIVATE_IMPL__CPU_ARCH__X86_64_V2)
5781+
if (wuffs_base__cpu_arch__have_x86_sse42()) {
5782+
return wuffs_private_impl__swizzle_swap_rgbx_bgrx__x86_sse42;
5783+
}
5784+
#endif
5785+
return wuffs_private_impl__swizzle_swap_rgbx_bgrx;
5786+
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
5787+
return wuffs_private_impl__swizzle_bgra_premul__rgba_premul__src_over;
5788+
}
5789+
return NULL;
5790+
}
5791+
return NULL;
5792+
}
5793+
56965794
static inline WUFFS_BASE__FORCE_INLINE wuffs_base__pixel_swizzler__func //
56975795
wuffs_private_impl__pixel_swizzler__prepare__bgrx(
56985796
wuffs_base__pixel_swizzler* p,
@@ -6111,6 +6209,11 @@ wuffs_base__pixel_swizzler__prepare(wuffs_base__pixel_swizzler* p,
61116209
p, dst_pixfmt, dst_palette, src_palette, blend);
61126210
break;
61136211

6212+
case WUFFS_BASE__PIXEL_FORMAT__BGRA_BINARY:
6213+
func = wuffs_private_impl__pixel_swizzler__prepare__bgra_binary(
6214+
p, dst_pixfmt, dst_palette, src_palette, blend);
6215+
break;
6216+
61146217
case WUFFS_BASE__PIXEL_FORMAT__BGRX:
61156218
func = wuffs_private_impl__pixel_swizzler__prepare__bgrx(
61166219
p, dst_pixfmt, dst_palette, src_palette, blend);

0 commit comments

Comments
 (0)