[Scummvm-git-logs] scummvm master -> b3aec17d6db8ae8f49587e5c6dc14a3ddc4d7033
ysj1173886760
42030331+ysj1173886760 at users.noreply.github.com
Mon Aug 16 09:01:44 UTC 2021
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
50bfc4e521 GRAPHICS: MACGUI: implement global color inverter.
4133592992 GRAPHICS: MACGUI: add cache for inverted color.
b3aec17d6d DIRECTOR: apply global inverter on reverse type ink.
Commit: 50bfc4e52181571eb16fb25f33da0e5602de6993
https://github.com/scummvm/scummvm/commit/50bfc4e52181571eb16fb25f33da0e5602de6993
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-16T16:54:00+08:00
Commit Message:
GRAPHICS: MACGUI: implement global color inverter.
Changed paths:
engines/director/window.cpp
graphics/macgui/macwindowmanager.cpp
graphics/macgui/macwindowmanager.h
diff --git a/engines/director/window.cpp b/engines/director/window.cpp
index 141855490a..33e7b98156 100644
--- a/engines/director/window.cpp
+++ b/engines/director/window.cpp
@@ -102,17 +102,10 @@ void Window::invertChannel(Channel *channel, const Common::Rect &destRect) {
// if this will cause efficiency problem, then we shall cache the inverted color in wm
for (int j = 0; j < srcRect.width(); j++, src++)
- if (!mask || (msk && !(*msk++))) {
- byte r, g, b;
- g_director->_wm->decomposeColor(*src, r, g, b);
- r = ~r;
- g = ~g;
- b = ~b;
- *src = g_director->_wm->findBestColor(r, g, b);
- }
+ if (!mask || (msk && !(*msk++)))
+ *src = _wm->inverter(*src);
}
} else {
- uint32 alpha = _wm->_pixelformat.ARGBToColor(255, 0, 0, 0);
for (int i = 0; i < srcRect.height(); i++) {
uint32 *src = (uint32 *)_composeSurface->getBasePtr(srcRect.left, srcRect.top + i);
@@ -120,7 +113,7 @@ void Window::invertChannel(Channel *channel, const Common::Rect &destRect) {
for (int j = 0; j < srcRect.width(); j++, src++)
if (!mask || (msk && !(*msk++)))
- *src = ~(*src & ~alpha) | alpha;
+ *src = _wm->inverter(*src);
}
}
}
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index bbfcb010fd..4dd3753f5c 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -1354,6 +1354,20 @@ void MacWindowManager::decomposeColor(uint32 color, byte &r, byte &g, byte &b) {
}
}
+uint MacWindowManager::inverter(uint src) {
+ if (_pixelformat.bytesPerPixel == 1) {
+ byte r, g, b;
+ decomposeColor(src, r, g, b);
+ r = ~r;
+ g = ~g;
+ b = ~b;
+ return findBestColor(r, g, b);
+ } else {
+ uint32 alpha = _pixelformat.ARGBToColor(255, 0, 0, 0);
+ return ~(src & ~alpha) | alpha;
+ }
+}
+
PauseToken MacWindowManager::pauseEngine() {
return _engineP->pauseEngine();
}
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index cdb77992b0..7b5bb0f8f4 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -307,6 +307,8 @@ public:
uint findBestColor(uint32 color);
void decomposeColor(uint32 color, byte &r, byte &g, byte &b);
+ uint inverter(uint src);
+
const byte *getPalette() { return _palette; }
uint getPaletteSize() { return _paletteSize; }
Commit: 41335929927f60b1176be921f81a44174ee5b844
https://github.com/scummvm/scummvm/commit/41335929927f60b1176be921f81a44174ee5b844
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-16T16:58:48+08:00
Commit Message:
GRAPHICS: MACGUI: add cache for inverted color.
Changed paths:
engines/director/window.cpp
graphics/macgui/macwindowmanager.cpp
graphics/macgui/macwindowmanager.h
diff --git a/engines/director/window.cpp b/engines/director/window.cpp
index 33e7b98156..cb7197bc4c 100644
--- a/engines/director/window.cpp
+++ b/engines/director/window.cpp
@@ -100,7 +100,6 @@ void Window::invertChannel(Channel *channel, const Common::Rect &destRect) {
byte *src = (byte *)_composeSurface->getBasePtr(srcRect.left, srcRect.top + i);
const byte *msk = mask ? (const byte *)mask->getBasePtr(xoff, yoff + i) : nullptr;
- // if this will cause efficiency problem, then we shall cache the inverted color in wm
for (int j = 0; j < srcRect.width(); j++, src++)
if (!mask || (msk && !(*msk++)))
*src = _wm->inverter(*src);
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 4dd3753f5c..f365f8d6d5 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -1295,6 +1295,7 @@ void MacWindowManager::passPalette(const byte *pal, uint size) {
_paletteSize = size;
_colorHash.clear();
+ _invertColorHash.clear();
LOOKUPCOLOR(White);
LOOKUPCOLOR(Gray80);
@@ -1355,17 +1356,21 @@ void MacWindowManager::decomposeColor(uint32 color, byte &r, byte &g, byte &b) {
}
uint MacWindowManager::inverter(uint src) {
+ if (_invertColorHash.contains(src))
+ return _invertColorHash[src];
+
if (_pixelformat.bytesPerPixel == 1) {
byte r, g, b;
decomposeColor(src, r, g, b);
r = ~r;
g = ~g;
b = ~b;
- return findBestColor(r, g, b);
+ _invertColorHash[src] = findBestColor(r, g, b);
} else {
uint32 alpha = _pixelformat.ARGBToColor(255, 0, 0, 0);
- return ~(src & ~alpha) | alpha;
+ _invertColorHash[src] = ~(src & ~alpha) | alpha;
}
+ return _invertColorHash[src];
}
PauseToken MacWindowManager::pauseEngine() {
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index 7b5bb0f8f4..3d9c482817 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -432,7 +432,8 @@ private:
PauseToken *_screenCopyPauseToken;
Common::Array<ZoomBox *> _zoomBoxes;
- Common::HashMap<uint32, uint> _colorHash;
+ Common::HashMap<uint, uint> _colorHash;
+ Common::HashMap<uint, uint> _invertColorHash;
Common::Archive *_dataBundle;
Commit: b3aec17d6db8ae8f49587e5c6dc14a3ddc4d7033
https://github.com/scummvm/scummvm/commit/b3aec17d6db8ae8f49587e5c6dc14a3ddc4d7033
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-16T17:00:32+08:00
Commit Message:
DIRECTOR: apply global inverter on reverse type ink.
Changed paths:
engines/director/graphics.cpp
diff --git a/engines/director/graphics.cpp b/engines/director/graphics.cpp
index 113194fc88..50fb9158ab 100644
--- a/engines/director/graphics.cpp
+++ b/engines/director/graphics.cpp
@@ -229,7 +229,7 @@ void inkDrawPixel(int x, int y, int src, void *data) {
*dst = p->applyColor ? (src & p->foreColor) | (*dst & ~src) : (*dst & ~src);
break;
case kInkTypeReverse:
- *dst ^= ~(src);
+ *dst = g_director->_wm->inverter(src);
break;
case kInkTypeNotReverse:
*dst ^= src;
More information about the Scummvm-git-logs
mailing list