[Scummvm-git-logs] scummvm master -> 4624dc9116cf77ab83e387f7d95d041511071e3d
aquadran
noreply at scummvm.org
Thu Nov 21 17:40:22 UTC 2024
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
4624dc9116 WINTERMUTE: Correctly implement W/A for TGA decoder
Commit: 4624dc9116cf77ab83e387f7d95d041511071e3d
https://github.com/scummvm/scummvm/commit/4624dc9116cf77ab83e387f7d95d041511071e3d
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2024-11-21T18:40:16+01:00
Commit Message:
WINTERMUTE: Correctly implement W/A for TGA decoder
Changed paths:
engines/wintermute/base/gfx/base_image.cpp
engines/wintermute/base/gfx/base_image.h
engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
diff --git a/engines/wintermute/base/gfx/base_image.cpp b/engines/wintermute/base/gfx/base_image.cpp
index 2ece650548a..b718ed59a78 100644
--- a/engines/wintermute/base/gfx/base_image.cpp
+++ b/engines/wintermute/base/gfx/base_image.cpp
@@ -46,6 +46,7 @@ namespace Wintermute {
BaseImage::BaseImage() {
_fileManager = BaseFileManager::getEngineInstance();
_palette = nullptr;
+ _paletteTga = nullptr;
_paletteCount = 0;
_surface = nullptr;
_decoder = nullptr;
@@ -60,6 +61,8 @@ BaseImage::~BaseImage() {
_deletableSurface->free();
}
delete _deletableSurface;
+ delete _paletteTga;
+ _paletteTga = nullptr;
}
bool BaseImage::loadFile(const Common::String &filename) {
@@ -88,6 +91,20 @@ bool BaseImage::loadFile(const Common::String &filename) {
_paletteCount = _decoder->getPaletteColorCount();
_fileManager->closeFile(file);
+ //
+ // W/A: ScummVM TGA decoder interpreting palette as RGB, but TGA format should be as BGR
+ // So, swap R and B color components
+ //
+ if (_filename.hasSuffix(".tga")) {
+ _paletteTga = new byte[_paletteCount * 3];
+ for (uint32 i = 0; i < _paletteCount * 3; i += 3) {
+ _paletteTga[i + 0] = _palette[i + 2];
+ _paletteTga[i + 1] = _palette[i + 1];
+ _paletteTga[i + 2] = _palette[i + 0];
+ }
+ _palette = _paletteTga;
+ }
+
return true;
}
diff --git a/engines/wintermute/base/gfx/base_image.h b/engines/wintermute/base/gfx/base_image.h
index 8b1ff120bfc..354066fc482 100644
--- a/engines/wintermute/base/gfx/base_image.h
+++ b/engines/wintermute/base/gfx/base_image.h
@@ -70,6 +70,7 @@ private:
const Graphics::Surface *_surface;
Graphics::Surface *_deletableSurface;
const byte *_palette;
+ byte *_paletteTga;
uint16 _paletteCount;
BaseFileManager *_fileManager;
};
diff --git a/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
index 2cef722000e..2d3d377213d 100644
--- a/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
@@ -141,16 +141,6 @@ bool BaseSurfaceOpenGL3D::create(const Common::String &filename, bool defaultCK,
ckBlue = 255;
}
- //
- // ScummVM TGA decoder interpreting palette as RGB, but TGA data has as BGR
- // swap R and B color components
- //
- if (img.getPaletteCount() != 0 && _filename.hasSuffix(".tga")) {
- byte tmp = ckBlue;
- ckBlue = ckRed;
- ckRed = tmp;
- }
-
_ckDefault = defaultCK;
_ckRed = ckRed;
_ckGreen = ckGreen;
@@ -165,17 +155,9 @@ bool BaseSurfaceOpenGL3D::create(const Common::String &filename, bool defaultCK,
}
#ifdef SCUMM_BIG_ENDIAN
- if (img.getSurface()->format.bytesPerPixel == 1 && _filename.hasSuffix(".tga")) {
- _imageData = img.getSurface()->convertTo(Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 0, 8, 16), img.getPalette(), img.getPaletteCount());
- } else {
- _imageData = img.getSurface()->convertTo(Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0), img.getPalette(), img.getPaletteCount());
- }
+ _imageData = img.getSurface()->convertTo(Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0), img.getPalette(), img.getPaletteCount());
#else
- if (img.getSurface()->format.bytesPerPixel == 1 && _filename.hasSuffix(".tga")) {
- _imageData = img.getSurface()->convertTo(Graphics::PixelFormat(4, 8, 8, 8, 8, 16, 8, 0, 24), img.getPalette(), img.getPaletteCount());
- } else {
- _imageData = img.getSurface()->convertTo(Graphics::PixelFormat(4, 8, 8, 8, 8, 0, 8, 16, 24), img.getPalette(), img.getPaletteCount());
- }
+ _imageData = img.getSurface()->convertTo(Graphics::PixelFormat(4, 8, 8, 8, 8, 0, 8, 16, 24), img.getPalette(), img.getPaletteCount());
#endif
if (BaseEngine::instance().getTargetExecutable() < WME_LITE) {
More information about the Scummvm-git-logs
mailing list