Skip to content

Commit 4f886b9

Browse files
committed
Asset editor interleaved pixel data
Use `il:true` to indicate interleaved byte data.
1 parent 3685eff commit 4f886b9

2 files changed

Lines changed: 13 additions & 5 deletions

File tree

src/ide/pixeleditor.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export type PixelEditorImageFormat = {
4545
flip?: boolean // flip vertically
4646
skip?: number // skip bytes
4747
wpimg?: number // words per image
48+
il?: boolean // interleave images row by row
4849
aspect?: number // aspect ratio
4950
xform?: string // CSS transform
5051
destfmt?: PixelEditorImageFormat
@@ -169,12 +170,14 @@ export function convertWordsToImages(words: UintArray, fmt: PixelEditorImageForm
169170
var pofs = fmt.pofs || wordsperline * height * count;
170171
var skip = fmt.skip || 0;
171172
var wpimg = fmt.wpimg || wordsperline * height;
173+
var rowstride = wordsperline;
174+
if (fmt.il) { wpimg = wordsperline; rowstride = wordsperline * count; }
172175
var images = [];
173176
for (var n = 0; n < count; n++) {
174177
var imgdata = [];
175178
for (var y = 0; y < height; y++) {
176179
var yp = fmt.flip ? height - 1 - y : y;
177-
var ofs0 = wpimg * n + yp * wordsperline;
180+
var ofs0 = wpimg * n + yp * rowstride;
178181
var shift = 0;
179182
for (var x = 0; x < width; x++) {
180183
var color = 0;
@@ -256,21 +259,24 @@ export function convertImagesToWords(images: Uint8Array[], fmt: PixelEditorImage
256259
var pofs = fmt.pofs || wordsperline * height * count;
257260
var skip = fmt.skip || 0;
258261
var wpimg = fmt.wpimg || wordsperline * height;
262+
var rowstride = wordsperline;
263+
if (fmt.il) { wpimg = wordsperline; rowstride = wordsperline * count; }
259264

265+
var totalwords = rowstride * height;
260266
var words;
261267
if (nplanes > 0 && fmt.sl) // TODO?
262-
words = new Uint8Array(wpimg * count);
268+
words = new Uint8Array(totalwords);
263269
else if (bitsperword <= 8)
264-
words = new Uint8Array(wpimg * count * nplanes);
270+
words = new Uint8Array(totalwords * nplanes);
265271
else
266-
words = new Uint32Array(wpimg * count * nplanes);
272+
words = new Uint32Array(totalwords * nplanes);
267273

268274
for (var n = 0; n < count; n++) {
269275
var imgdata = images[n];
270276
var i = 0;
271277
for (var y = 0; y < height; y++) {
272278
var yp = fmt.flip ? height - 1 - y : y;
273-
var ofs0 = n * wpimg + yp * wordsperline;
279+
var ofs0 = n * wpimg + yp * rowstride;
274280
var shift = 0;
275281
for (var x = 0; x < width; x++) {
276282
var color = imgdata[i++];

src/ide/ui.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1596,6 +1596,7 @@ function openAssetEditorHelp() {
15961596
${row('flip', 'false', 'Flip vertically (y=0 is bottom row)')}
15971597
${row('skip', '0', 'Skip bytes at start of each image')}
15981598
${row('pofs', 'sl&times;h&times;count', 'Offset between bitplanes')}
1599+
${row('il', '0', 'Interleave images row by row (data stored as one wide block)')}
15991600
${row('remap', '&mdash;', 'Bit remapping table for address lines')}
16001601
${row('reindex', '&mdash;', 'Pixel-to-byte/bit remapping')}
16011602
${row('wpimg', 'sl&times;h', 'Words per image')}
@@ -1608,6 +1609,7 @@ function openAssetEditorHelp() {
16081609
${row('layout', '&mdash;', 'Palette editor layout (nes, astrocade)')}
16091610
<tr><th colspan="3">Examples</th></tr>
16101611
<tr><td colspan="2"><code>/*{w:8,h:8,bpp:1,brev:1}*/</code></td><td>8x8 1bpp, MSB first (NES-style)</td></tr>
1612+
<tr><td colspan="2"><code>;;{w:8,h:5,count:4,il:1};;</code></td><td>4 interleaved 8x5 chars (stored as 32x5 block)</td></tr>
16111613
<tr><td colspan="2"><code>;;{w:7,h:8};;</code></td><td>7x8 1bpp, LSB first (Apple II HGR)</td></tr>
16121614
<tr><td colspan="2"><code>/*{w:16,h:16,bpp:4,np:1}*/</code></td><td>16x16 4bpp</td></tr>
16131615
<tr><td colspan="2"><code>/*{pal:332,n:16}*/</code></td><td>16-entry RGB332 palette</pre></td></tr>

0 commit comments

Comments
 (0)