wined3d: Implemented converting X1R5G5B5 format to R5G5B5A1 to emulate color-keying.

This commit is contained in:
Kolbjoern Fredheim 2007-05-22 03:29:44 +02:00 committed by Alexandre Julliard
parent 071ea06af8
commit cb8a8182d1
1 changed files with 35 additions and 0 deletions

View File

@ -1532,6 +1532,15 @@ static HRESULT d3dfmt_get_conv(IWineD3DSurfaceImpl *This, BOOL need_alpha_ck, BO
}
break;
case WINED3DFMT_X1R5G5B5:
if (colorkey_active) {
*convert = CONVERT_CK_5551;
*format = GL_BGRA;
*internal = GL_RGBA;
*type = GL_UNSIGNED_SHORT_1_5_5_5_REV;
}
break;
case WINED3DFMT_R8G8B8:
if (colorkey_active) {
*convert = CONVERT_CK_RGB24;
@ -1720,6 +1729,32 @@ HRESULT d3dfmt_convert_surface(BYTE *src, BYTE *dst, UINT pitch, UINT width, UIN
}
break;
case CONVERT_CK_5551:
{
/* Converting X1R5G5B5 format to R5G5B5A1 to emulate color-keying. */
unsigned int x, y;
WORD *Source;
WORD *Dest;
TRACE("Color keyed 5551\n");
for (y = 0; y < height; y++) {
Source = (WORD *) (src + y * pitch);
Dest = (WORD *) (dst + y * outpitch);
for (x = 0; x < width; x++ ) {
WORD color = *Source++;
*Dest = color;
if ((color < surf->SrcBltCKey.dwColorSpaceLowValue) ||
(color > surf->SrcBltCKey.dwColorSpaceHighValue)) {
*Dest |= (1 << 15);
}
else {
*Dest &= ~(1 << 15);
}
Dest++;
}
}
}
break;
case CONVERT_V8U8:
{
unsigned int x, y;