aboutsummaryrefslogtreecommitdiff
path: root/crates/fparkan-texm
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-10-17 23:19:42 +0300
committerValentin Popov <valentin@popov.link>2026-10-17 23:19:42 +0300
commitd4a29b3acaf09355b975c2a46e37aaccad0a4f43 (patch)
treeebfce9463342d93936a65f8be5c75d57fcd4279f /crates/fparkan-texm
parentc92beb1b389fb1b35fd8eac871fb5372c5093b88 (diff)
downloadfparkan-d4a29b3acaf09355b975c2a46e37aaccad0a4f43.tar.xz
fparkan-d4a29b3acaf09355b975c2a46e37aaccad0a4f43.zip
Fix Indexed8 Texm palette decoding
Diffstat (limited to 'crates/fparkan-texm')
-rw-r--r--crates/fparkan-texm/src/lib.rs19
1 files changed, 15 insertions, 4 deletions
diff --git a/crates/fparkan-texm/src/lib.rs b/crates/fparkan-texm/src/lib.rs
index 3578dd0..4b7ffaa 100644
--- a/crates/fparkan-texm/src/lib.rs
+++ b/crates/fparkan-texm/src/lib.rs
@@ -665,10 +665,10 @@ fn decode_mip_rgba8_internal(
continue;
}
let out = index.saturating_mul(4);
- rgba[out] = palette[palette_offset];
+ rgba[out] = palette[palette_offset + 2];
rgba[out + 1] = palette[palette_offset + 1];
- rgba[out + 2] = palette[palette_offset + 2];
- rgba[out + 3] = palette[palette_offset + 3];
+ rgba[out + 2] = palette[palette_offset];
+ rgba[out + 3] = 255;
}
}
DiskPixelFormat::Rgb565 => decode_words(level_data, pixel_count, &mut rgba, decode_rgb565),
@@ -996,6 +996,17 @@ mod tests {
}
#[test]
+ fn indexed_palette_decodes_bgrx_as_opaque_rgba() {
+ let document =
+ decode_texm(Arc::from(indexed_payload().into_boxed_slice())).expect("indexed document");
+
+ assert_eq!(
+ decode_mip_rgba8(&document, 0).expect("rgba").rgba8,
+ [30, 20, 10, 255]
+ );
+ }
+
+ #[test]
fn channel_expansion_boundary_values_are_stable() {
let document = decode_texm(Arc::from(
payload(2, 1, 565, &[&[0x00, 0x00, 0xFF, 0xFF]]).into_boxed_slice(),
@@ -1155,7 +1166,7 @@ mod tests {
fn indexed_payload() -> Vec<u8> {
let mut palette = [0_u8; 1024];
- palette[4..8].copy_from_slice(&[10, 20, 30, 255]);
+ palette[4..8].copy_from_slice(&[10, 20, 30, 0]);
let mut out = header(1, 1, 1, 0);
out.extend_from_slice(&palette);
out.push(1);