[Scummvm-git-logs] scummvm master -> e699d4a37171cd2950e7d3d7ee058ff1b0e89a4a
dreammaster
noreply at scummvm.org
Wed Jun 1 02:18:39 UTC 2022
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:
e699d4a371 ULTIMA8: Refactor RenderSurface _format from being a global object
Commit: e699d4a37171cd2950e7d3d7ee058ff1b0e89a4a
https://github.com/scummvm/scummvm/commit/e699d4a37171cd2950e7d3d7ee058ff1b0e89a4a
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-05-31T19:18:27-07:00
Commit Message:
ULTIMA8: Refactor RenderSurface _format from being a global object
Changed paths:
engines/ultima/ultima8/graphics/base_soft_render_surface.cpp
engines/ultima/ultima8/graphics/render_surface.cpp
engines/ultima/ultima8/graphics/render_surface.h
engines/ultima/ultima8/graphics/soft_render_surface.cpp
engines/ultima/ultima8/ultima8.cpp
engines/ultima/ultima8/ultima8.h
diff --git a/engines/ultima/ultima8/graphics/base_soft_render_surface.cpp b/engines/ultima/ultima8/graphics/base_soft_render_surface.cpp
index aaa647a1df7..e89e7b8a204 100644
--- a/engines/ultima/ultima8/graphics/base_soft_render_surface.cpp
+++ b/engines/ultima/ultima8/graphics/base_soft_render_surface.cpp
@@ -51,31 +51,31 @@ BaseSoftRenderSurface::BaseSoftRenderSurface(Graphics::ManagedSurface *s) :
_bytesPerPixel = _surface->format.bytesPerPixel;
// TODO: Slight hack - set the global surface format only once.
- if (!RenderSurface::_format.bytesPerPixel) {
- RenderSurface::_format.bytesPerPixel = _bytesPerPixel;
- RenderSurface::_format.rLoss = _surface->format.rLoss;
- RenderSurface::_format.gLoss = _surface->format.gLoss;
- RenderSurface::_format.bLoss = _surface->format.bLoss;
- RenderSurface::_format.aLoss = _surface->format.aLoss;
- RenderSurface::_format.rLoss16 = _format.rLoss + 8;
- RenderSurface::_format.gLoss16 = _format.gLoss + 8;
- RenderSurface::_format.bLoss16 = _format.bLoss + 8;
- RenderSurface::_format.aLoss16 = _format.aLoss + 8;
- RenderSurface::_format.rShift = _surface->format.rShift;
- RenderSurface::_format.gShift = _surface->format.gShift;
- RenderSurface::_format.bShift = _surface->format.bShift;
- RenderSurface::_format.aShift = _surface->format.aShift;
- RenderSurface::_format.rMask = _surface->format.rMax() << _surface->format.rShift;
- RenderSurface::_format.gMask = _surface->format.gMax() << _surface->format.gShift;
- RenderSurface::_format.bMask = _surface->format.bMax() << _surface->format.bShift;
- RenderSurface::_format.aMask = _surface->format.aMax() << _surface->format.aShift;
+ if (!RenderSurface::_format->bytesPerPixel) {
+ RenderSurface::_format->bytesPerPixel = _bytesPerPixel;
+ RenderSurface::_format->rLoss = _surface->format.rLoss;
+ RenderSurface::_format->gLoss = _surface->format.gLoss;
+ RenderSurface::_format->bLoss = _surface->format.bLoss;
+ RenderSurface::_format->aLoss = _surface->format.aLoss;
+ RenderSurface::_format->rLoss16 = _format->rLoss + 8;
+ RenderSurface::_format->gLoss16 = _format->gLoss + 8;
+ RenderSurface::_format->bLoss16 = _format->bLoss + 8;
+ RenderSurface::_format->aLoss16 = _format->aLoss + 8;
+ RenderSurface::_format->rShift = _surface->format.rShift;
+ RenderSurface::_format->gShift = _surface->format.gShift;
+ RenderSurface::_format->bShift = _surface->format.bShift;
+ RenderSurface::_format->aShift = _surface->format.aShift;
+ RenderSurface::_format->rMask = _surface->format.rMax() << _surface->format.rShift;
+ RenderSurface::_format->gMask = _surface->format.gMax() << _surface->format.gShift;
+ RenderSurface::_format->bMask = _surface->format.bMax() << _surface->format.bShift;
+ RenderSurface::_format->aMask = _surface->format.aMax() << _surface->format.aShift;
}
SetPixelsPointer();
// Trickery to get the alpha channel
- if (_format.aMask == 0 && _bytesPerPixel == 4) {
- uint32 mask = ~(_format.rMask | _format.gMask | _format.bMask);
+ if (_format->aMask == 0 && _bytesPerPixel == 4) {
+ uint32 mask = ~(_format->rMask | _format->gMask | _format->bMask);
// Using all bits????
if (!mask) return;
@@ -104,10 +104,10 @@ BaseSoftRenderSurface::BaseSoftRenderSurface(Graphics::ManagedSurface *s) :
if (zero < last) return;
// Set it
- _format.aShift = first;
- _format.aLoss = 8 - (last + 1 - first);
- _format.aLoss16 = _format.aLoss + 8;
- _format.aMask = mask;
+ _format->aShift = first;
+ _format->aLoss = 8 - (last + 1 - first);
+ _format->aLoss16 = _format->aLoss + 8;
+ _format->aMask = mask;
}
}
diff --git a/engines/ultima/ultima8/graphics/render_surface.cpp b/engines/ultima/ultima8/graphics/render_surface.cpp
index 72af703d199..a2e54a35ec2 100644
--- a/engines/ultima/ultima8/graphics/render_surface.cpp
+++ b/engines/ultima/ultima8/graphics/render_surface.cpp
@@ -21,6 +21,7 @@
#include "ultima/ultima8/misc/pent_include.h"
#include "ultima/ultima8/graphics/soft_render_surface.h"
+#include "ultima/ultima8/ultima8.h"
#include "common/system.h"
#include "engines/util.h"
#include "graphics/screen.h"
@@ -28,7 +29,7 @@
namespace Ultima {
namespace Ultima8 {
-RenderSurface::U8PixelFormat RenderSurface::_format;
+U8PixelFormat *RenderSurface::_format = nullptr;
uint8 RenderSurface::_gamma10toGamma22[256];
uint8 RenderSurface::_gamma22toGamma10[256];
@@ -41,6 +42,8 @@ uint8 RenderSurface::_gamma22toGamma10[256];
//
RenderSurface *RenderSurface::SetVideoMode(uint32 width, uint32 height, int bpp) {
+ _format = &Ultima8Engine::get_instance()->_renderFormat;
+
// Set up the pixel format to use
Graphics::PixelFormat pixelFormat;
@@ -79,8 +82,8 @@ RenderSurface *RenderSurface::CreateSecondaryRenderSurface(uint32 width, uint32
RenderSurface *surf;
// TODO: Change this
- Graphics::ManagedSurface *managedSurface = new Graphics::ManagedSurface(width, height, _format);
- if (_format.bytesPerPixel == 4) surf = new SoftRenderSurface<uint32>(managedSurface);
+ Graphics::ManagedSurface *managedSurface = new Graphics::ManagedSurface(width, height, *_format);
+ if (_format->bytesPerPixel == 4) surf = new SoftRenderSurface<uint32>(managedSurface);
else surf = new SoftRenderSurface<uint16>(managedSurface);
return surf;
}
diff --git a/engines/ultima/ultima8/graphics/render_surface.h b/engines/ultima/ultima8/graphics/render_surface.h
index 80eee2298c6..05211dcac3e 100644
--- a/engines/ultima/ultima8/graphics/render_surface.h
+++ b/engines/ultima/ultima8/graphics/render_surface.h
@@ -37,13 +37,24 @@ struct Palette;
struct Rect;
class Scaler;
-#define UNPACK_RGB8(pix,r,g,b) { r = (((pix)&RenderSurface::_format.rMask)>>RenderSurface::_format.rShift)<<RenderSurface::_format.rLoss; g = (((pix)&RenderSurface::_format.gMask)>>RenderSurface::_format.gShift)<<RenderSurface::_format.gLoss; b = (((pix)&RenderSurface::_format.bMask)>>RenderSurface::_format.bShift)<<RenderSurface::_format.bLoss; }
-#define PACK_RGB8(r,g,b) ((((r)>>RenderSurface::_format.rLoss)<<RenderSurface::_format.rShift) | (((g)>>RenderSurface::_format.gLoss)<<RenderSurface::_format.gShift) | (((b)>>RenderSurface::_format.bLoss)<<RenderSurface::_format.bShift))
-#define PACK_RGB16(r,g,b) ((((r)>>RenderSurface::_format.rLoss16)<<RenderSurface::_format.rShift) | (((g)>>RenderSurface::_format.gLoss16)<<RenderSurface::_format.gShift) | (((b)>>RenderSurface::_format.bLoss16)<<RenderSurface::_format.bShift))
-
-#define UNPACK_RGBA8(pix,r,g,b,a) { r = (((pix)&RenderSurface::_format.rMask)>>RenderSurface::_format.rShift)<<RenderSurface::_format.rLoss; g = (((pix)&RenderSurface::_format.gMask)>>RenderSurface::_format.gShift)<<RenderSurface::_format.gLoss; b = (((pix)&RenderSurface::_format.bMask)>>RenderSurface::_format.bShift)<<RenderSurface::_format.bLoss; ; a = (((pix)&RenderSurface::_format.aMask)>>RenderSurface::_format.aShift)<<RenderSurface::_format.aLoss; }
-#define PACK_RGBA8(r,g,b,a) ((((r)>>RenderSurface::_format.rLoss)<<RenderSurface::_format.rShift) | (((g)>>RenderSurface::_format.gLoss)<<RenderSurface::_format.gShift) | (((b)>>RenderSurface::_format.bLoss)<<RenderSurface::_format.bShift) | (((a)>>RenderSurface::_format.aLoss)<<RenderSurface::_format.aShift))
-#define PACK_RGBA16(r,g,b,a) ((((r)>>RenderSurface::_format.rLoss16)<<RenderSurface::_format.rShift) | (((g)>>RenderSurface::_format.gLoss16)<<RenderSurface::_format.gShift) | (((b)>>RenderSurface::_format.bLoss16)<<RenderSurface::_format.bShift) | (((a)>>RenderSurface::_format.aLoss16)<<RenderSurface::_format.aShift))
+#define UNPACK_RGB8(pix,r,g,b) { r = (((pix)&RenderSurface::_format->rMask)>>RenderSurface::_format->rShift)<<RenderSurface::_format->rLoss; g = (((pix)&RenderSurface::_format->gMask)>>RenderSurface::_format->gShift)<<RenderSurface::_format->gLoss; b = (((pix)&RenderSurface::_format->bMask)>>RenderSurface::_format->bShift)<<RenderSurface::_format->bLoss; }
+#define PACK_RGB8(r,g,b) ((((r)>>RenderSurface::_format->rLoss)<<RenderSurface::_format->rShift) | (((g)>>RenderSurface::_format->gLoss)<<RenderSurface::_format->gShift) | (((b)>>RenderSurface::_format->bLoss)<<RenderSurface::_format->bShift))
+#define PACK_RGB16(r,g,b) ((((r)>>RenderSurface::_format->rLoss16)<<RenderSurface::_format->rShift) | (((g)>>RenderSurface::_format->gLoss16)<<RenderSurface::_format->gShift) | (((b)>>RenderSurface::_format->bLoss16)<<RenderSurface::_format->bShift))
+
+#define UNPACK_RGBA8(pix,r,g,b,a) { r = (((pix)&RenderSurface::_format->rMask)>>RenderSurface::_format->rShift)<<RenderSurface::_format->rLoss; g = (((pix)&RenderSurface::_format->gMask)>>RenderSurface::_format->gShift)<<RenderSurface::_format->gLoss; b = (((pix)&RenderSurface::_format->bMask)>>RenderSurface::_format->bShift)<<RenderSurface::_format->bLoss; ; a = (((pix)&RenderSurface::_format->aMask)>>RenderSurface::_format->aShift)<<RenderSurface::_format->aLoss; }
+#define PACK_RGBA8(r,g,b,a) ((((r)>>RenderSurface::_format->rLoss)<<RenderSurface::_format->rShift) | (((g)>>RenderSurface::_format->gLoss)<<RenderSurface::_format->gShift) | (((b)>>RenderSurface::_format->bLoss)<<RenderSurface::_format->bShift) | (((a)>>RenderSurface::_format->aLoss)<<RenderSurface::_format->aShift))
+#define PACK_RGBA16(r,g,b,a) ((((r)>>RenderSurface::_format->rLoss16)<<RenderSurface::_format->rShift) | (((g)>>RenderSurface::_format->gLoss16)<<RenderSurface::_format->gShift) | (((b)>>RenderSurface::_format->bLoss16)<<RenderSurface::_format->bShift) | (((a)>>RenderSurface::_format->aLoss16)<<RenderSurface::_format->aShift))
+
+struct U8PixelFormat : Graphics::PixelFormat {
+ // Extend with some extra attributes
+ byte rLoss16, gLoss16, bLoss16, aLoss16;
+ uint32 rMask, gMask, bMask, aMask;
+
+ inline U8PixelFormat() : Graphics::PixelFormat(),
+ rLoss16(0), gLoss16(0), bLoss16(0), aLoss16(0),
+ rMask(0), gMask(0), bMask(0), aMask(0) {
+ }
+};
//
// RenderSurface
@@ -52,19 +63,7 @@ class Scaler;
//
class RenderSurface {
public:
- struct U8PixelFormat : Graphics::PixelFormat {
- // Extend with some extra attributes
- byte rLoss16, gLoss16, bLoss16, aLoss16;
- uint32 rMask, gMask, bMask, aMask;
-
- inline U8PixelFormat() : Graphics::PixelFormat(),
- rLoss16(0), gLoss16(0), bLoss16(0), aLoss16(0),
- rMask(0), gMask(0), bMask(0), aMask(0)
- {
- }
- };
-
- static U8PixelFormat _format;
+ static U8PixelFormat *_format;
static uint8 _gamma10toGamma22[256];
static uint8 _gamma22toGamma10[256];
diff --git a/engines/ultima/ultima8/graphics/soft_render_surface.cpp b/engines/ultima/ultima8/graphics/soft_render_surface.cpp
index 983bf4a10ef..cfc1de83036 100644
--- a/engines/ultima/ultima8/graphics/soft_render_surface.cpp
+++ b/engines/ultima/ultima8/graphics/soft_render_surface.cpp
@@ -75,7 +75,7 @@ template<class uintX> void SoftRenderSurface<uintX>::FillAlpha(uint8 alpha, int3
w = rect.width();
h = rect.height();
- if (!w || !h || !RenderSurface::_format.aMask) return;
+ if (!w || !h || !RenderSurface::_format->aMask) return;
// An optimization.
if ((int)(w * sizeof(uintX)) == _pitch) {
@@ -89,24 +89,24 @@ template<class uintX> void SoftRenderSurface<uintX>::FillAlpha(uint8 alpha, int3
uint8 *line_end = pixel + w * sizeof(uintX);
int diff = _pitch - w * sizeof(uintX);
- uintX a = (((uintX)alpha) << RenderSurface::_format.aShift)&RenderSurface::_format.aMask;
+ uintX a = (((uintX)alpha) << RenderSurface::_format->aShift)&RenderSurface::_format->aMask;
#ifdef CHECK_ALPHA_FILLS
uintX c;
uintX m;
if (a == 0) {
- c = (RenderSurface::_format.bMask >> 1)&RenderSurface::_format.bMask;
- m = RenderSurface::_format.bMask;
+ c = (RenderSurface::_format->bMask >> 1)&RenderSurface::_format->bMask;
+ m = RenderSurface::_format->bMask;
} else {
- c = (RenderSurface::_format.rMask >> 1)&RenderSurface::_format.rMask;
- m = RenderSurface::_format.rMask;
+ c = (RenderSurface::_format->rMask >> 1)&RenderSurface::_format->rMask;
+ m = RenderSurface::_format->rMask;
}
#endif
while (pixel != end) {
while (pixel != line_end) {
uintX *dest = reinterpret_cast<uintX *>(pixel);
- *dest = (*dest & ~RenderSurface::_format.aMask) | a;
+ *dest = (*dest & ~RenderSurface::_format->aMask) | a;
#ifdef CHECK_ALPHA_FILLS
*dest = (*dest & ~m) | (c + (((*dest & m) >> 1)&m));
#endif
@@ -154,7 +154,7 @@ template<class uintX> void SoftRenderSurface<uintX>::FillBlended(uint32 rgba, in
while (pixel != line_end) {
uintX *dest = reinterpret_cast<uintX *>(pixel);
uintX d = *dest;
- *dest = (d & RenderSurface::_format.aMask) | BlendPreModFast(rgba, d);
+ *dest = (d & RenderSurface::_format->aMask) | BlendPreModFast(rgba, d);
pixel += sizeof(uintX);
}
@@ -342,7 +342,7 @@ template<class uintX> void SoftRenderSurface<uintX>::FadedBlit(const Graphics::M
pixel += diff;
texel += tex_diff;
}
- } else if (texformat == _format) {
+ } else if (texformat == *_format) {
const uintX *texel = reinterpret_cast<const uintX *>(tex->getBasePtr(sx, sy));
int tex_diff = tex->w - w;
@@ -362,7 +362,7 @@ template<class uintX> void SoftRenderSurface<uintX>::FadedBlit(const Graphics::M
texel += tex_diff;
}
} else {
- error("FadedBlit not supported from %d bpp to %d bpp", texformat.bpp(), _format.bpp());
+ error("FadedBlit not supported from %d bpp to %d bpp", texformat.bpp(), _format->bpp());
}
}
@@ -422,7 +422,7 @@ template<class uintX> void SoftRenderSurface<uintX>::MaskedBlit(const Graphics::
uintX *dest = reinterpret_cast<uintX *>(pixel);
if (*texel & TEX32_A_MASK) {
- if (!RenderSurface::_format.aMask || (*dest & RenderSurface::_format.aMask)) {
+ if (!RenderSurface::_format->aMask || (*dest & RenderSurface::_format->aMask)) {
*dest = static_cast<uintX>(
PACK_RGB8(
(TEX32_R(*texel) * ia + r) >> 8,
@@ -439,7 +439,7 @@ template<class uintX> void SoftRenderSurface<uintX>::MaskedBlit(const Graphics::
while (pixel != line_end) {
uintX *dest = reinterpret_cast<uintX *>(pixel);
- if (!RenderSurface::_format.aMask || (*dest & RenderSurface::_format.aMask)) {
+ if (!RenderSurface::_format->aMask || (*dest & RenderSurface::_format->aMask)) {
uint32 alpha = *texel & TEX32_A_MASK;
if (alpha == 0xFF) {
*dest = static_cast<uintX>(
@@ -473,7 +473,7 @@ template<class uintX> void SoftRenderSurface<uintX>::MaskedBlit(const Graphics::
pixel += diff;
texel += tex_diff;
}
- } else if (texbpp == _format.bpp()) {
+ } else if (texbpp == _format->bpp()) {
const uintX *texel = reinterpret_cast<const uintX *>(tex->getBasePtr(sx, sy));
int tex_diff = tex->w - w;
@@ -482,8 +482,8 @@ template<class uintX> void SoftRenderSurface<uintX>::MaskedBlit(const Graphics::
uintX *dest = reinterpret_cast<uintX *>(pixel);
// Uh, not completely supported right now
- //if ((*texel & RenderSurface::_format.a_mask) && (*dest & RenderSurface::_format.a_mask))
- if (*dest & RenderSurface::_format.aMask) {
+ //if ((*texel & RenderSurface::_format->a_mask) && (*dest & RenderSurface::_format->a_mask))
+ if (*dest & RenderSurface::_format->aMask) {
*dest = BlendHighlight(*texel, r, g, b, 1, ia);
}
pixel += sizeof(uintX);
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 87718408982..122f79c19c3 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -671,7 +671,7 @@ void Ultima8Engine::GraphicSysInit() {
_screen->GetSurfaceDims(old_dims);
if (width == old_dims.width() && height == old_dims.height())
return;
- bpp = RenderSurface::_format.bpp();
+ bpp = RenderSurface::_format->bpp();
delete _screen;
}
diff --git a/engines/ultima/ultima8/ultima8.h b/engines/ultima/ultima8/ultima8.h
index bf6ad2b7ba7..bb00ddb2b23 100644
--- a/engines/ultima/ultima8/ultima8.h
+++ b/engines/ultima/ultima8/ultima8.h
@@ -29,6 +29,7 @@
#include "ultima/ultima8/usecode/intrinsics.h"
#include "ultima/ultima8/misc/common_types.h"
#include "ultima/ultima8/games/game_info.h"
+#include "ultima/ultima8/graphics/render_surface.h"
#include "ultima/detection.h"
namespace Ultima {
@@ -378,6 +379,8 @@ public:
bool isInterpolationEnabled() const {
return _interpolate;
}
+public:
+ U8PixelFormat _renderFormat;
};
} // End of namespace Ultima8
More information about the Scummvm-git-logs
mailing list