4.3 KiB
| id | ticket | title | status | created | completed | ref_decisions | tags | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| PLN-0082 | studio-packer-rgba8888-asset-pipeline | RGBA8888 Palette Model and ARGB Conversion | review | 2026-05-23 |
|
|
Objective
Replace the packer palette model with canonical RGBA8888 data and introduce a single deliberate ARGB-to-RGBA conversion boundary for image inputs.
Background
PackerPaletteV1 currently stores originalArgb8888 and convertedRgb565.
PackerGlyphBankWalker reads Java ARGB pixels, drops alpha semantics, reserves
index 0, applies magenta color-key, and converts colors to RGB565.
Scope
Included
- Replace
PackerPaletteV1fields with canonicalrgba8888. - Add or localize ARGB-to-RGBA conversion helpers.
- Preserve partial alpha.
- Remove RGB565 conversion from the normal palette model.
- Expand glyph palette extraction from 15 to 16 usable colors.
Excluded
- Binary
assets.paemission changes. - Read/detail API projection changes outside direct model compile fixes.
- Spec edits.
- Fixture regeneration for
mainandfragments.
Execution Steps
Step 1 - Replace the palette record
What: Change the packer palette model to carry canonical RGBA8888 values.
How: Replace int[] originalArgb8888, short[] convertedRgb565 with
int[] rgba8888. Keep the record name only if it remains semantically useful;
otherwise rename only if all callers are updated in the same change.
File(s):
prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerPaletteV1.java
Step 2 - Convert ARGB image pixels to RGBA
What: Introduce one conversion path from Java BufferedImage ARGB to raw
runtime RGBA.
How: Convert 0xAARRGGBB to 0xRRGGBBAA when building palette entries.
Do not store ARGB in canonical packer metadata.
File(s):
prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/repositories/PackerGlyphBankWalker.java
Step 3 - Remove magenta color-key and reserved index behavior
What: Stop treating alpha zero or magenta as special palette-index behavior.
How: Remove COLOR_KEY_RGB. Build palette identity from full RGBA8888
values, including alpha. Assign indices from 0 through 15.
File(s):
prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/repositories/PackerGlyphBankWalker.java
Step 4 - Preserve partial alpha
What: Remove partial-alpha warnings and flattening.
How: Delete the partialAlphaFound warning path. Ensure pixels with alpha
from 0 through 255 participate in palette extraction by full RGBA value.
File(s):
prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/repositories/PackerGlyphBankWalker.java
Step 5 - Update color-limit validation
What: Change validation from 15 usable colors to 16 usable colors.
How: Replace MAX_COLORS_PER_PALETTE = 15 with a 16-entry limit and update
diagnostic wording to remove indices 1..15.
File(s):
prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/repositories/PackerGlyphBankWalker.java
Test Requirements
Unit Tests
- Update
PackerGlyphBankWalkerTestto assert:- 16 unique RGBA colors are valid.
- a 17th unique RGBA color is blocking.
- alpha
0, partial alpha, and alpha255are preserved. - magenta is treated as an ordinary color.
- palette index
0can hold an ordinary color.
Integration Tests
- None for this plan; binary emission is covered by a later plan.
Manual Verification
- Search packer model and glyph walker sources for
convertedRgb565,originalArgb8888,COLOR_KEY_RGB,convertToRgb565, and partial-alpha warning text.
Acceptance Criteria
PackerPaletteV1exposesrgba8888and no RGB565 field.PackerGlyphBankWalkerstores canonical RGBA values.- Magenta is not special.
- Alpha zero and partial alpha are valid palette data.
- All 16 palette indices are usable.
- Unit tests cover conversion and palette indexing semantics.
Dependencies
- Depends on
PLN-0081for spec wording. - Must complete before payload emission and projection plans.
Risks
- Confusing Java ARGB input with runtime RGBA output will create hard-to-debug byte-order failures.
- Cache reuse may keep stale palette metadata if reusable metadata checks are not updated with the model change.