[Scummvm-cvs-logs] scummvm master -> 91c2f8fb097f65801f6f97340e0a4a8dbead6404
wjp
wjp at usecode.org
Mon Aug 19 23:17:00 CEST 2013
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:
91c2f8fb09 WINTERMUTE: Don't use a lookup table for alpha
Commit: 91c2f8fb097f65801f6f97340e0a4a8dbead6404
https://github.com/scummvm/scummvm/commit/91c2f8fb097f65801f6f97340e0a4a8dbead6404
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2013-08-19T14:14:20-07:00
Commit Message:
WINTERMUTE: Don't use a lookup table for alpha
This gives a drawTickets() speed increase of about 10% in the JULIA demo
(on a core i7 920).
Changed paths:
engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
engines/wintermute/graphics/transparent_surface.cpp
engines/wintermute/graphics/transparent_surface.h
diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
index 6681054..9738357 100644
--- a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
+++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
@@ -84,7 +84,6 @@ BaseRenderOSystem::~BaseRenderOSystem() {
delete _renderSurface;
_blankSurface->free();
delete _blankSurface;
- TransparentSurface::destroyLookup();
}
//////////////////////////////////////////////////////////////////////////
diff --git a/engines/wintermute/graphics/transparent_surface.cpp b/engines/wintermute/graphics/transparent_surface.cpp
index e375322..d348015 100644
--- a/engines/wintermute/graphics/transparent_surface.cpp
+++ b/engines/wintermute/graphics/transparent_surface.cpp
@@ -140,13 +140,6 @@ void TransparentSurface::copyPixelNearestNeighbor(float projX, float projY, int
}
#endif
-byte *TransparentSurface::_lookup = nullptr;
-
-void TransparentSurface::destroyLookup() {
- delete[] _lookup;
- _lookup = nullptr;
-}
-
TransparentSurface::TransparentSurface() : Surface(), _enableAlphaBlit(true) {}
TransparentSurface::TransparentSurface(const Surface &surf, bool copyData) : Surface(), _enableAlphaBlit(true) {
@@ -186,22 +179,9 @@ void doBlitOpaque(byte *ino, byte *outo, uint32 width, uint32 height, uint32 pit
}
}
-void TransparentSurface::generateLookup() {
- _lookup = new byte[256 * 256];
- for (int i = 0; i < 256; i++) {
- for (int j = 0; j < 256; j++) {
- _lookup[(i << 8) + j] = (i * j) >> 8;
- }
- }
-}
-
void TransparentSurface::doBlitAlpha(byte *ino, byte *outo, uint32 width, uint32 height, uint32 pitch, int32 inStep, int32 inoStep) {
byte *in, *out;
- if (!_lookup) {
- generateLookup();
- }
-
#ifdef SCUMM_LITTLE_ENDIAN
const int aIndex = 3;
const int bIndex = 0;
@@ -255,13 +235,9 @@ void TransparentSurface::doBlitAlpha(byte *ino, byte *outo, uint32 width, uint32
default: // alpha blending
outa = 255;
-
- outb = _lookup[(((oPix >> bShiftTarget) & 0xff)) + ((255 - a) << 8)];
- outg = _lookup[(((oPix >> gShiftTarget) & 0xff)) + ((255 - a) << 8)];
- outr = _lookup[(((oPix >> rShiftTarget) & 0xff)) + ((255 - a) << 8)];
- outb += _lookup[b + (a << 8)];
- outg += _lookup[g + (a << 8)];
- outr += _lookup[r + (a << 8)];
+ outb = ((b * a) + ((oPix >> bShiftTarget) & 0xff) * (255-a)) >> 8;
+ outg = ((g * a) + ((oPix >> gShiftTarget) & 0xff) * (255-a)) >> 8;
+ outr = ((r * a) + ((oPix >> rShiftTarget) & 0xff) * (255-a)) >> 8;
out[aIndex] = outa;
out[bIndex] = outb;
diff --git a/engines/wintermute/graphics/transparent_surface.h b/engines/wintermute/graphics/transparent_surface.h
index 9d06f3e..a486e97 100644
--- a/engines/wintermute/graphics/transparent_surface.h
+++ b/engines/wintermute/graphics/transparent_surface.h
@@ -114,11 +114,8 @@ struct TransparentSurface : public Graphics::Surface {
TransparentSurface *scale(uint16 newWidth, uint16 newHeight) const;
TransparentSurface *rotoscale(const TransformStruct &transform) const;
- static byte *_lookup;
- static void destroyLookup();
private:
static void doBlitAlpha(byte *ino, byte *outo, uint32 width, uint32 height, uint32 pitch, int32 inStep, int32 inoStep);
- static void generateLookup();
};
/**
More information about the Scummvm-git-logs
mailing list