From 4d11cf941e75eecb5682ca74cf92f631d3555671 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sat, 21 Aug 2010 21:44:44 +0000 Subject: SWORD25: Another attempt to implement alpha blending. Looks a bit better. svn-id: r53275 --- engines/sword25/gfx/opengl/glimage.cpp | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) (limited to 'engines/sword25/gfx') diff --git a/engines/sword25/gfx/opengl/glimage.cpp b/engines/sword25/gfx/opengl/glimage.cpp index 9029a09054..97cd5be8a0 100644 --- a/engines/sword25/gfx/opengl/glimage.cpp +++ b/engines/sword25/gfx/opengl/glimage.cpp @@ -214,26 +214,29 @@ bool GLImage::Blit(int PosX, int PosY, int Flipping, Common::Rect *pPartRect, un out = outo; in = ino; for (int j = 0; j < w; j++) { - switch (*in) { + int r = *in++; + int g = *in++; + int b = *in++; + int a = *in++; + switch (a) { case 0: // Full transparency - in += 4; out += 4; break; case 255: // Full opacity - default: - *out++ = *in++; - *out++ = *in++; - *out++ = *in++; - *out++ = *in++; + *out++ = r; + *out++ = g; + *out++ = b; + *out++ = a; break; -#if 0 default: // alpha blending - *out++ = 255; - int alpha = *in++; - for (int c = 0; c < 3; c++, out++, in++) { - *out = (byte)((int)(*out - *in) * alpha + *in); - } -#endif + *out = (byte)((((int)(*out - r) * a + r) >> 8) & 0xff); + out++; + *out = (byte)((((int)(*out - g) * a + g) >> 8) & 0xff); + out++; + *out = (byte)((((int)(*out - b) * a + b) >> 8) & 0xff); + out++; + *out = 255; + out++; } } outo += _backSurface->pitch; -- cgit v1.2.3