Module: wine Branch: master Commit: 02b031e61acf2738a772f5a2a82277e36851518a URL: http://source.winehq.org/git/wine.git/?a=commit;h=02b031e61acf2738a772f5a2a8...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Wed Oct 1 09:18:58 2014 +0200
wined3d: Convert to WINED3DFMT_B5G5R5A1_UNORM for WINED3D_CT_CK_B5G6R5.
---
dlls/wined3d/surface.c | 41 ++++++++++++++--------------------------- 1 file changed, 14 insertions(+), 27 deletions(-)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index b24504e..2ee3db1 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -1604,7 +1604,7 @@ static void d3dfmt_get_conv(const struct wined3d_texture *texture, BOOL need_alp } color_key_info[] = { - {WINED3DFMT_B5G6R5_UNORM, WINED3D_CT_CK_B5G6R5, GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, 2}, + {WINED3DFMT_B5G6R5_UNORM, WINED3D_CT_CK_B5G6R5, GL_RGB5_A1, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, 2}, {WINED3DFMT_B5G5R5X1_UNORM, WINED3D_CT_CK_B5G5R5X1, GL_RGB5_A1, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, 2}, {WINED3DFMT_B8G8R8_UNORM, WINED3D_CT_CK_B8G8R8, GL_RGBA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, 4}, {WINED3DFMT_B8G8R8X8_UNORM, WINED3D_CT_CK_B8G8R8X8, GL_RGBA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, 4}, @@ -3207,35 +3207,22 @@ static HRESULT d3dfmt_convert_surface(const BYTE *src, BYTE *dst, UINT pitch, UI break;
case WINED3D_CT_CK_B5G6R5: - { - /* Converting the 565 format in 5551 packed to emulate color-keying. - - Note : in all these conversion, it would be best to average the averaging - pixels to get the color of the pixel that will be color-keyed to - prevent 'color bleeding'. This will be done later on if ever it is - too visible. - - Note2: Nvidia documents say that their driver does not support alpha + color keying - on the same surface and disables color keying in such a case - */ - const WORD *Source; - WORD *Dest; - - TRACE("Color keyed 565\n"); - - for (y = 0; y < height; y++) { - Source = (const WORD *)(src + y * pitch); - Dest = (WORD *) (dst + y * outpitch); - for (x = 0; x < width; x++ ) { - WORD color = *Source++; - *Dest = ((color & 0xffc0) | ((color & 0x1f) << 1)); + for (y = 0; y < height; ++y) + { + source = src + pitch * y; + dest = dst + outpitch * y; + for (x = 0; x < width; ++x) + { + WORD color = *(const WORD *)source; if (!color_in_range(&surface->container->src_blt_color_key, color)) - *Dest |= 0x0001; - Dest++; + *(WORD *)dest = 0x8000 | ((color & 0xffc0) >> 1) | (color & 0x1f); + else + *(WORD *)dest = ((color & 0xffc0) >> 1) | (color & 0x1f); + source += 2; + dest += 2; } } - } - break; + break;
case WINED3D_CT_CK_B5G5R5X1: {