dev/runtime-owned-variable-glyph-bank-palette-protocol #37
@ -625,9 +625,8 @@ impl AssetManager {
|
||||
let serialized_size = serialized_pixel_bytes
|
||||
.checked_add(palette_bytes)
|
||||
.ok_or("GlyphBank serialized size overflow")?;
|
||||
let decoded_size = logical_pixels
|
||||
.checked_add(palette_bytes)
|
||||
.ok_or("GlyphBank decoded size overflow")?;
|
||||
let decoded_size =
|
||||
logical_pixels.checked_add(palette_bytes).ok_or("GlyphBank decoded size overflow")?;
|
||||
|
||||
if entry.size != serialized_size as u64 {
|
||||
return Err(format!(
|
||||
@ -1213,11 +1212,9 @@ impl AssetManager {
|
||||
let logical_pixels = width * height;
|
||||
let packed_pixels = &buffer[0..packed_pixel_bytes];
|
||||
let pixel_indices = Self::unpack_glyph_bank_pixels(packed_pixels, logical_pixels);
|
||||
let palette_data =
|
||||
&buffer[packed_pixel_bytes..packed_pixel_bytes + palette_bytes];
|
||||
let palette_data = &buffer[packed_pixel_bytes..packed_pixel_bytes + palette_bytes];
|
||||
|
||||
let mut palettes =
|
||||
vec![[Color::BLACK; GLYPH_BANK_COLORS_PER_PALETTE]; palette_count];
|
||||
let mut palettes = vec![[Color::BLACK; GLYPH_BANK_COLORS_PER_PALETTE]; palette_count];
|
||||
for (p, pal) in palettes.iter_mut().enumerate() {
|
||||
for (c, slot) in pal.iter_mut().enumerate() {
|
||||
let offset = (p * 16 + c) * 4;
|
||||
@ -1252,8 +1249,7 @@ impl AssetManager {
|
||||
.read_exact(&mut palette_data)
|
||||
.map_err(|_| "Buffer too small for GLYPHBANK".to_string())?;
|
||||
|
||||
let mut palettes =
|
||||
vec![[Color::BLACK; GLYPH_BANK_COLORS_PER_PALETTE]; palette_count];
|
||||
let mut palettes = vec![[Color::BLACK; GLYPH_BANK_COLORS_PER_PALETTE]; palette_count];
|
||||
for (p, pal) in palettes.iter_mut().enumerate() {
|
||||
for (c, slot) in pal.iter_mut().enumerate() {
|
||||
let offset = (p * 16 + c) * 4;
|
||||
@ -1903,10 +1899,7 @@ mod tests {
|
||||
|
||||
fn test_glyph_asset_data_with_palette_count(palette_count: usize) -> Vec<u8> {
|
||||
let mut data = vec![0x11u8; 128];
|
||||
data.extend_from_slice(&vec![
|
||||
0u8;
|
||||
palette_count * GLYPH_BANK_PALETTE_BYTES_PER_PALETTE
|
||||
]);
|
||||
data.extend_from_slice(&vec![0u8; palette_count * GLYPH_BANK_PALETTE_BYTES_PER_PALETTE]);
|
||||
data
|
||||
}
|
||||
|
||||
@ -2109,8 +2102,8 @@ mod tests {
|
||||
let from_buffer =
|
||||
AssetManager::decode_glyph_bank_from_buffer(&entry, &data).expect("buffer decode");
|
||||
let mut reader = std::io::Cursor::new(data);
|
||||
let from_reader =
|
||||
AssetManager::decode_glyph_bank_from_reader(&entry, &mut reader).expect("reader decode");
|
||||
let from_reader = AssetManager::decode_glyph_bank_from_reader(&entry, &mut reader)
|
||||
.expect("reader decode");
|
||||
|
||||
assert_eq!(from_buffer.palette_count(), from_reader.palette_count());
|
||||
assert_eq!(from_buffer.pixel_indices, from_reader.pixel_indices);
|
||||
@ -2120,10 +2113,8 @@ mod tests {
|
||||
#[test]
|
||||
fn test_decode_glyph_bank_rejects_short_packed_buffer() {
|
||||
let entry = test_glyph_asset_entry("glyphs", 16, 16);
|
||||
let data = vec![
|
||||
0u8;
|
||||
expected_glyph_payload_size(16, 16, GLYPH_BANK_MAX_PALETTE_COUNT_V1) - 1
|
||||
];
|
||||
let data =
|
||||
vec![0u8; expected_glyph_payload_size(16, 16, GLYPH_BANK_MAX_PALETTE_COUNT_V1) - 1];
|
||||
|
||||
let err = match AssetManager::decode_glyph_bank_from_buffer(&entry, &data) {
|
||||
Ok(_) => panic!("glyph decode should reject short buffer"),
|
||||
|
||||
@ -142,10 +142,7 @@ fn test_glyph_asset_entry(asset_name: &str, data_len: usize) -> AssetEntry {
|
||||
|
||||
fn test_glyph_asset_data() -> Vec<u8> {
|
||||
let mut data =
|
||||
vec![
|
||||
0x11u8;
|
||||
test_glyph_payload_size(16, 16) - (GLYPH_BANK_MAX_PALETTE_COUNT_V1 * 16 * 4)
|
||||
];
|
||||
vec![0x11u8; test_glyph_payload_size(16, 16) - (GLYPH_BANK_MAX_PALETTE_COUNT_V1 * 16 * 4)];
|
||||
data.extend_from_slice(&[0u8; GLYPH_BANK_MAX_PALETTE_COUNT_V1 * 16 * 4]);
|
||||
data
|
||||
}
|
||||
|
||||
@ -275,8 +275,7 @@ fn build_glyph_asset() -> (AssetEntry, Vec<u8>) {
|
||||
bank_type: BankType::GLYPH,
|
||||
offset: 0,
|
||||
size: payload.len() as u64,
|
||||
decoded_size: (8 * 8
|
||||
+ GLYPH_BANK_MAX_PALETTE_COUNT_V1 * GLYPH_BANK_COLORS_PER_PALETTE * 4)
|
||||
decoded_size: (8 * 8 + GLYPH_BANK_MAX_PALETTE_COUNT_V1 * GLYPH_BANK_COLORS_PER_PALETTE * 4)
|
||||
as u64,
|
||||
codec: AssetCodec::None,
|
||||
metadata: serde_json::json!({
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user