refactor(core/rendering): neteja del parser GIF i construcció de Surface (DUP-01/-06 + HC-03/-10 + PATCH-05)
- DUP-01: les tres branques del switch d'extensions que saltaven el mateix (bloc fix + sub-blocs) es substitueixen per una crida a skipExtensionBlock(); com que totes les extensions comparteixen layout, el switch desapareix i el codi es redueix a una línia. - DUP-06: el constructor Surface(file_path) llegia el fitxer dues voltes (una via loadSurface per pixels i una altra via loadPaletteFromGif per la paleta); ara carrega el buffer una sola vegada i n'extrau pixels + paleta en passades separades sobre la memòria. Surface::loadSurface passa a no existir públicament (no tenia callers externs). - HC-03: les màscares i talls màgics del decoder LZW i del Screen Descriptor passen a constants nominals (LZW_MIN/MAX_CODE_LENGTH, LZW_MASK_INITIAL, LZW_MASK_OVERFLOW, SCREEN_GCT_FLAG, SCREEN_GCT_SIZE_MASK, GCT_BYTES_PER_ENTRY). - HC-10: processImageDescriptor tenia gct i resolution_bits [[maybe_unused]] vestigials; se'n treu la signatura. L'struct RGB, que només servia per a aquests args, també s'elimina. - PATCH-05: el comentari "reemplaçar macro READ" (migració parcial des de C) passa a ser un comentari neutre sobre el que fa readBytes. Build + smoke 5s xvfb OK (exit 124). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
bbb397abb2
commit
be94a4390e
5 files changed
+78
-95
No files matched your search
@@ -37,13 +37,9 @@ Surface::Surface(int w, int h)
|
||||
}
|
||||
|
||||
Surface::Surface(const std::string& file_path) {
|
||||
SurfaceData loaded = loadSurface(file_path);
|
||||
surface_data_ = std::make_shared<SurfaceData>(std::move(loaded));
|
||||
initializeSubPalette(sub_palette_);
|
||||
palette_ = loadPaletteFromGif(file_path);
|
||||
}
|
||||
|
||||
auto Surface::loadSurface(const std::string& file_path) -> SurfaceData {
|
||||
// Carreguem el fitxer una única vegada i n'extraiem pixels i paleta de
|
||||
// passades independents sobre el mateix buffer en memòria — abans es
|
||||
// parsejava dues voltes (loadSurface + loadPaletteFromGif).
|
||||
auto buffer = Resource::Helper::loadFile(file_path);
|
||||
if (buffer.empty()) {
|
||||
throw std::runtime_error("Surface: cannot open " + file_path);
|
||||
@@ -58,9 +54,16 @@ auto Surface::loadSurface(const std::string& file_path) -> SurfaceData {
|
||||
|
||||
auto pixels = std::shared_ptr<Uint8[]>(new Uint8[raw_pixels.size()], std::default_delete<Uint8[]>());
|
||||
std::memcpy(pixels.get(), raw_pixels.data(), raw_pixels.size());
|
||||
surface_data_ = std::make_shared<SurfaceData>(static_cast<int>(w), static_cast<int>(h), pixels);
|
||||
initializeSubPalette(sub_palette_);
|
||||
|
||||
std::vector<std::uint32_t> rgb = GIF::Gif::loadPalette(buffer.data());
|
||||
const std::size_t COUNT = std::min(rgb.size(), palette_.size());
|
||||
for (std::size_t i = 0; i < COUNT; ++i) {
|
||||
palette_[i] = 0xFF000000U | rgb[i];
|
||||
}
|
||||
|
||||
printWithDots("Surface : ", getFileName(file_path), "[ LOADED ]");
|
||||
return {static_cast<int>(w), static_cast<int>(h), pixels};
|
||||
}
|
||||
|
||||
void Surface::clear(Uint8 color) {
|
||||
|
||||
Reference in new issue
Block a user