mirror of
https://github.com/gbdev/rgbds.git
synced 2026-09-02 03:48:41 +00:00
Fix RGBGFX crash when trimming more tiles than exist after deduplication
This commit is contained in:
+27
-11
@@ -853,20 +853,36 @@ static void outputTileData(UniqueTiles const &tiles) {
|
|||||||
// LCOV_EXCL_STOP
|
// LCOV_EXCL_STOP
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t tileID = 0;
|
uint64_t nbTiles = tiles.size();
|
||||||
for (auto iter = tiles.begin(), end = tiles.end() - options.trim; iter != end; ++iter) {
|
uint64_t nbKeptTiles = nbTiles > options.trim ? nbTiles - options.trim : 0;
|
||||||
TileData const *tile = *iter;
|
uint64_t tileIdx = 0;
|
||||||
assume(tile->tileID == tileID);
|
|
||||||
++tileID;
|
for (TileData const *tile : tiles) {
|
||||||
if (options.bitDepth == 2) {
|
assume(tile->tileID == tileIdx);
|
||||||
output->sputn(reinterpret_cast<char const *>(tile->data().data()), 16);
|
bool empty = true;
|
||||||
} else {
|
for (uint32_t y = 0; y < 8; ++y) {
|
||||||
assume(options.bitDepth == 1);
|
uint8_t bitplane0 = tile->data()[y * 2];
|
||||||
for (size_t y = 0; y < 8; ++y) {
|
uint8_t bitplane1 = tile->data()[y * 2 + 1];
|
||||||
output->sputc(tile->data()[y * 2]);
|
if (bitplane0 || bitplane1) {
|
||||||
|
empty = false;
|
||||||
|
}
|
||||||
|
if (tileIdx < nbKeptTiles) {
|
||||||
|
output->sputc(bitplane0);
|
||||||
|
if (options.bitDepth == 2) {
|
||||||
|
output->sputc(bitplane1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty && tileIdx >= nbKeptTiles) {
|
||||||
|
warning(
|
||||||
|
WARNING_TRIM_NONEMPTY, "Trimming a nonempty tile (configure with '-x/--trim-end')"
|
||||||
|
);
|
||||||
|
break; // Don't repeat the warning for subsequent tiles
|
||||||
|
}
|
||||||
|
++tileIdx;
|
||||||
}
|
}
|
||||||
|
assume(nbKeptTiles <= tileIdx && tileIdx <= nbTiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void outputTilemap(std::vector<AttrmapEntry> const &attrmap) {
|
static void outputTilemap(std::vector<AttrmapEntry> const &attrmap) {
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
warning: Trimming a nonempty tile (configure with '-x/--trim-end') [-Wtrim-nonempty]
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
-Wtrim-nonempty
|
||||||
|
-m
|
||||||
|
-x 3
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 111 B |
Reference in New Issue
Block a user