Runtime-Owned Variable Glyph Bank Palette Protocol
All checks were successful
Intrepid/Prometeu/Runtime/pipeline/pr-master This commit looks good
All checks were successful
Intrepid/Prometeu/Runtime/pipeline/pr-master This commit looks good
This commit is contained in:
parent
7cced0709b
commit
f784ccd774
@ -625,9 +625,8 @@ impl AssetManager {
|
|||||||
let serialized_size = serialized_pixel_bytes
|
let serialized_size = serialized_pixel_bytes
|
||||||
.checked_add(palette_bytes)
|
.checked_add(palette_bytes)
|
||||||
.ok_or("GlyphBank serialized size overflow")?;
|
.ok_or("GlyphBank serialized size overflow")?;
|
||||||
let decoded_size = logical_pixels
|
let decoded_size =
|
||||||
.checked_add(palette_bytes)
|
logical_pixels.checked_add(palette_bytes).ok_or("GlyphBank decoded size overflow")?;
|
||||||
.ok_or("GlyphBank decoded size overflow")?;
|
|
||||||
|
|
||||||
if entry.size != serialized_size as u64 {
|
if entry.size != serialized_size as u64 {
|
||||||
return Err(format!(
|
return Err(format!(
|
||||||
@ -1213,11 +1212,9 @@ impl AssetManager {
|
|||||||
let logical_pixels = width * height;
|
let logical_pixels = width * height;
|
||||||
let packed_pixels = &buffer[0..packed_pixel_bytes];
|
let packed_pixels = &buffer[0..packed_pixel_bytes];
|
||||||
let pixel_indices = Self::unpack_glyph_bank_pixels(packed_pixels, logical_pixels);
|
let pixel_indices = Self::unpack_glyph_bank_pixels(packed_pixels, logical_pixels);
|
||||||
let palette_data =
|
let palette_data = &buffer[packed_pixel_bytes..packed_pixel_bytes + palette_bytes];
|
||||||
&buffer[packed_pixel_bytes..packed_pixel_bytes + palette_bytes];
|
|
||||||
|
|
||||||
let mut palettes =
|
let mut palettes = vec![[Color::BLACK; GLYPH_BANK_COLORS_PER_PALETTE]; palette_count];
|
||||||
vec![[Color::BLACK; GLYPH_BANK_COLORS_PER_PALETTE]; palette_count];
|
|
||||||
for (p, pal) in palettes.iter_mut().enumerate() {
|
for (p, pal) in palettes.iter_mut().enumerate() {
|
||||||
for (c, slot) in pal.iter_mut().enumerate() {
|
for (c, slot) in pal.iter_mut().enumerate() {
|
||||||
let offset = (p * 16 + c) * 4;
|
let offset = (p * 16 + c) * 4;
|
||||||
@ -1252,8 +1249,7 @@ impl AssetManager {
|
|||||||
.read_exact(&mut palette_data)
|
.read_exact(&mut palette_data)
|
||||||
.map_err(|_| "Buffer too small for GLYPHBANK".to_string())?;
|
.map_err(|_| "Buffer too small for GLYPHBANK".to_string())?;
|
||||||
|
|
||||||
let mut palettes =
|
let mut palettes = vec![[Color::BLACK; GLYPH_BANK_COLORS_PER_PALETTE]; palette_count];
|
||||||
vec![[Color::BLACK; GLYPH_BANK_COLORS_PER_PALETTE]; palette_count];
|
|
||||||
for (p, pal) in palettes.iter_mut().enumerate() {
|
for (p, pal) in palettes.iter_mut().enumerate() {
|
||||||
for (c, slot) in pal.iter_mut().enumerate() {
|
for (c, slot) in pal.iter_mut().enumerate() {
|
||||||
let offset = (p * 16 + c) * 4;
|
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> {
|
fn test_glyph_asset_data_with_palette_count(palette_count: usize) -> Vec<u8> {
|
||||||
let mut data = vec![0x11u8; 128];
|
let mut data = vec![0x11u8; 128];
|
||||||
data.extend_from_slice(&vec![
|
data.extend_from_slice(&vec![0u8; palette_count * GLYPH_BANK_PALETTE_BYTES_PER_PALETTE]);
|
||||||
0u8;
|
|
||||||
palette_count * GLYPH_BANK_PALETTE_BYTES_PER_PALETTE
|
|
||||||
]);
|
|
||||||
data
|
data
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2109,8 +2102,8 @@ mod tests {
|
|||||||
let from_buffer =
|
let from_buffer =
|
||||||
AssetManager::decode_glyph_bank_from_buffer(&entry, &data).expect("buffer decode");
|
AssetManager::decode_glyph_bank_from_buffer(&entry, &data).expect("buffer decode");
|
||||||
let mut reader = std::io::Cursor::new(data);
|
let mut reader = std::io::Cursor::new(data);
|
||||||
let from_reader =
|
let from_reader = AssetManager::decode_glyph_bank_from_reader(&entry, &mut reader)
|
||||||
AssetManager::decode_glyph_bank_from_reader(&entry, &mut reader).expect("reader decode");
|
.expect("reader decode");
|
||||||
|
|
||||||
assert_eq!(from_buffer.palette_count(), from_reader.palette_count());
|
assert_eq!(from_buffer.palette_count(), from_reader.palette_count());
|
||||||
assert_eq!(from_buffer.pixel_indices, from_reader.pixel_indices);
|
assert_eq!(from_buffer.pixel_indices, from_reader.pixel_indices);
|
||||||
@ -2120,10 +2113,8 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_decode_glyph_bank_rejects_short_packed_buffer() {
|
fn test_decode_glyph_bank_rejects_short_packed_buffer() {
|
||||||
let entry = test_glyph_asset_entry("glyphs", 16, 16);
|
let entry = test_glyph_asset_entry("glyphs", 16, 16);
|
||||||
let data = vec![
|
let data =
|
||||||
0u8;
|
vec![0u8; expected_glyph_payload_size(16, 16, GLYPH_BANK_MAX_PALETTE_COUNT_V1) - 1];
|
||||||
expected_glyph_payload_size(16, 16, GLYPH_BANK_MAX_PALETTE_COUNT_V1) - 1
|
|
||||||
];
|
|
||||||
|
|
||||||
let err = match AssetManager::decode_glyph_bank_from_buffer(&entry, &data) {
|
let err = match AssetManager::decode_glyph_bank_from_buffer(&entry, &data) {
|
||||||
Ok(_) => panic!("glyph decode should reject short buffer"),
|
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> {
|
fn test_glyph_asset_data() -> Vec<u8> {
|
||||||
let mut data =
|
let mut data =
|
||||||
vec![
|
vec![0x11u8; test_glyph_payload_size(16, 16) - (GLYPH_BANK_MAX_PALETTE_COUNT_V1 * 16 * 4)];
|
||||||
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.extend_from_slice(&[0u8; GLYPH_BANK_MAX_PALETTE_COUNT_V1 * 16 * 4]);
|
||||||
data
|
data
|
||||||
}
|
}
|
||||||
|
|||||||
@ -275,8 +275,7 @@ fn build_glyph_asset() -> (AssetEntry, Vec<u8>) {
|
|||||||
bank_type: BankType::GLYPH,
|
bank_type: BankType::GLYPH,
|
||||||
offset: 0,
|
offset: 0,
|
||||||
size: payload.len() as u64,
|
size: payload.len() as u64,
|
||||||
decoded_size: (8 * 8
|
decoded_size: (8 * 8 + GLYPH_BANK_MAX_PALETTE_COUNT_V1 * GLYPH_BANK_COLORS_PER_PALETTE * 4)
|
||||||
+ GLYPH_BANK_MAX_PALETTE_COUNT_V1 * GLYPH_BANK_COLORS_PER_PALETTE * 4)
|
|
||||||
as u64,
|
as u64,
|
||||||
codec: AssetCodec::None,
|
codec: AssetCodec::None,
|
||||||
metadata: serde_json::json!({
|
metadata: serde_json::json!({
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user