| 1496 | } |
| 1497 | |
| 1498 | void CommandCompare::compareLevelIndex(PrintDiff& diff, InputStreams& streams) { |
| 1499 | if (options.ignoreIndex != IgnoreIndex::none) return; |
| 1500 | |
| 1501 | diff.setContext("Level Index\n\n"); |
| 1502 | |
| 1503 | const uint32_t numLevels[] = { |
| 1504 | std::max(1u, headers[0].levelCount), |
| 1505 | std::max(1u, headers[1].levelCount) |
| 1506 | }; |
| 1507 | const uint32_t maxNumLevels = std::max(numLevels[0], numLevels[1]); |
| 1508 | |
| 1509 | for (uint32_t level = 0; level < maxNumLevels; ++level) { |
| 1510 | const auto levelIndexEntryOffset = sizeof(KTX_header2) + level * sizeof(ktxLevelIndexEntry); |
| 1511 | std::optional<ktxLevelIndexEntry> levelIndexEntry[2]; |
| 1512 | for (std::size_t i = 0; i < streams.size(); ++i) |
| 1513 | if (level < numLevels[i]) { |
| 1514 | ktxLevelIndexEntry entry; |
| 1515 | read(streams[i], levelIndexEntryOffset, &entry, sizeof(entry), "the level index"); |
| 1516 | levelIndexEntry[i] = entry; |
| 1517 | } |
| 1518 | |
| 1519 | diff << DiffHex(fmt::format("Level{}.byteOffset", level), |
| 1520 | fmt::format("/index/levels/{}/byteOffset", level), |
| 1521 | OPT_FIELDS(levelIndexEntry, byteOffset)); |
| 1522 | diff << Diff(fmt::format("Level{}.byteLength", level), |
| 1523 | fmt::format("/index/levels/{}/byteLength", level), |
| 1524 | OPT_FIELDS(levelIndexEntry, byteLength)); |
| 1525 | diff << Diff(fmt::format("Level{}.uncompressedByteLength", level), |
| 1526 | fmt::format("/index/levels/{}/uncompressedByteLength", level), |
| 1527 | OPT_FIELDS(levelIndexEntry, uncompressedByteLength)); |
| 1528 | } |
| 1529 | } |
| 1530 | |
| 1531 | void CommandCompare::compareDFD(PrintDiff& diff, InputStreams& streams) { |
| 1532 | if (options.ignoreDFD == IgnoreDFD::all) return; |