Rewrite transpose_tiles to be in-place (#475)

This commit is contained in:
Sylvie 2024-10-07 12:04:01 -04:00 committed by GitHub
parent a8f26148e3
commit a6715ef164
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -44,15 +44,18 @@ int read_bit(uint8_t *data) {
} }
void transpose_tiles(uint8_t *data, int width) { void transpose_tiles(uint8_t *data, int width) {
int size = width * width * 0x10; int size = width * width;
uint8_t *transposed = xmalloc(size);
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
int j = (i / 0x10) * width * 0x10; int j = (i * width + i / width) % size;
j = (j % size) + 0x10 * (j / size) + (i % 0x10); if (i < j) {
transposed[j] = data[i]; uint8_t tmp[0x10];
uint8_t *p = data + i * COUNTOF(tmp);
uint8_t *q = data + j * COUNTOF(tmp);
memcpy(tmp, p, COUNTOF(tmp));
memcpy(p, q, COUNTOF(tmp));
memcpy(q, tmp, COUNTOF(tmp));
}
} }
memcpy(data, transposed, size);
free(transposed);
} }
void compress_plane(uint8_t *plane, int width) { void compress_plane(uint8_t *plane, int width) {