[Scummvm-git-logs] scummvm master -> bfb8b192694b6dd0381226de65721c7b13ff7c18
aquadran
noreply at scummvm.org
Fri Oct 11 19:35:15 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:
bfb8b19269 WINTERMUTE: Fixed palette buffer overflow.
Commit: bfb8b192694b6dd0381226de65721c7b13ff7c18
https://github.com/scummvm/scummvm/commit/bfb8b192694b6dd0381226de65721c7b13ff7c18
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2024-10-11T21:35:09+02:00
Commit Message:
WINTERMUTE: Fixed palette buffer overflow.
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
engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
diff --git a/engines/wintermute/base/gfx/base_image.cpp b/engines/wintermute/base/gfx/base_image.cpp
index eeb4985f419..740021cdd71 100644
--- a/engines/wintermute/base/gfx/base_image.cpp
+++ b/engines/wintermute/base/gfx/base_image.cpp
@@ -45,6 +45,7 @@ namespace Wintermute {
BaseImage::BaseImage() {
_fileManager = BaseFileManager::getEngineInstance();
_palette = nullptr;
+ _paletteCount = 0;
_surface = nullptr;
_decoder = nullptr;
_deletableSurface = nullptr;
@@ -83,6 +84,7 @@ bool BaseImage::loadFile(const Common::String &filename) {
_decoder->loadStream(*file);
_surface = _decoder->getSurface();
_palette = _decoder->getPalette();
+ _paletteCount = _decoder->getPaletteColorCount();
_fileManager->closeFile(file);
return true;
diff --git a/engines/wintermute/base/gfx/base_image.h b/engines/wintermute/base/gfx/base_image.h
index 48095daf864..8b1ff120bfc 100644
--- a/engines/wintermute/base/gfx/base_image.h
+++ b/engines/wintermute/base/gfx/base_image.h
@@ -55,6 +55,9 @@ public:
const byte *getPalette() const {
return _palette;
}
+ uint16 getPaletteCount() const {
+ return _paletteCount;
+ }
byte getAlphaAt(int x, int y) const;
bool writeBMPToStream(Common::WriteStream *stream) const;
bool resize(int newWidth, int newHeight);
@@ -67,6 +70,7 @@ private:
const Graphics::Surface *_surface;
Graphics::Surface *_deletableSurface;
const byte *_palette;
+ 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 0db36dc0d00..5376eb2d44b 100644
--- a/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
@@ -151,9 +151,9 @@ bool BaseSurfaceOpenGL3D::create(const Common::String &filename, bool defaultCK,
}
#ifdef SCUMM_BIG_ENDIAN
- _imageData = img.getSurface()->convertTo(Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0), img.getPalette());
+ _imageData = img.getSurface()->convertTo(Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0), img.getPalette(), img.getPaletteCount());
#else
- _imageData = img.getSurface()->convertTo(Graphics::PixelFormat(4, 8, 8, 8, 8, 0, 8, 16, 24), img.getPalette());
+ _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) {
diff --git a/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp b/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
index e270ca0acad..1122ef0614e 100644
--- a/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
+++ b/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
@@ -127,7 +127,7 @@ bool BaseSurfaceOSystem::finishLoad() {
if (!image->getPalette()) {
error("Missing palette while loading 8bit image %s", _filename.c_str());
}
- _surface = image->getSurface()->convertTo(g_system->getScreenFormat(), image->getPalette());
+ _surface = image->getSurface()->convertTo(g_system->getScreenFormat(), image->getPalette(), image->getPaletteCount());
} else if (image->getSurface()->format != g_system->getScreenFormat()) {
_surface = image->getSurface()->convertTo(g_system->getScreenFormat());
} else {
More information about the Scummvm-git-logs
mailing list