Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/******************************Module*Header*******************************\
* Module Name: span2.h * * This code figures out the color for pixel and stores it * * 14-Oct-1994 mikeke Created * * Copyright (c) 1994 Microsoft Corporation \**************************************************************************/
{ DWORD r, g, b; DWORD color; #if DITHER
#if (BPP == 8)
ULONG ditherVal = pdither[((ULONG_PTR)pPix) & 0x3]; #elif (BPP == 16)
ULONG ditherVal = pdither[((ULONG_PTR)pPix & 0x6) >> 1]; #elif (BPP == 24)
ULONG ditherVal = pdither[iDither]; #else
ULONG ditherVal = pdither[((ULONG_PTR)pPix & 0xc) >> 2]; #endif
#else
#if (RGBMODE) && (TEXTURE) && (SHADE)
#define ditherVal 0x0008
#else
#define ditherVal 0x0000
#endif
#endif
#if TEXTURE
#if !(SHADE) && !(DITHER) && (BPP == 8)
texBits = (BYTE *)(texAddr + ((sAccum & GENACCEL(gengc).sMask) >> 16) + ((tAccum & GENACCEL(gengc).tMask) >> GENACCEL(gengc).tShift)); #elif !(SHADE) && !(DITHER) && (BPP == 16)
texBits = (BYTE *)(texAddr + ((sAccum & GENACCEL(gengc).sMask) >> 15) + ((tAccum & GENACCEL(gengc).tMask) >> GENACCEL(gengc).tShift)); #else
texBits = (BYTE *)(texAddr + ((sAccum & GENACCEL(gengc).sMask) >> 14) + ((tAccum & GENACCEL(gengc).tMask) >> GENACCEL(gengc).tShift)); #endif
#endif
#if !(RGBMODE)
// !!! probably don't need to mask values
#if (BPP == 8)
color = ((rAccum + ditherVal) >> 16) & 0xff; #else
color = ((PULONG)pXlat)[(((rAccum + ditherVal) >> 16) & 0xfff)]; #endif
#else //RGBMODE
#if TEXTURE
#if SHADE
#define BIGSHIFT 8
#ifdef RSHIFT
r = ((ULONG)gbMulTable[(((rAccum >> RBITS) & 0xff00) | texBits[2])] << RBITS) + ditherVal; g = ((ULONG)gbMulTable[(((gAccum >> GBITS) & 0xff00) | texBits[1])] << GBITS) + ditherVal; b = ((ULONG)gbMulTable[(((bAccum >> BBITS) & 0xff00) | texBits[0])] << BBITS) + ditherVal; #else
r = ((ULONG)gbMulTable[(((rAccum >> rBits) & 0xff00) | texBits[2])] << rBits) + ditherVal; g = ((ULONG)gbMulTable[(((gAccum >> gBits) & 0xff00) | texBits[1])] << gBits) + ditherVal; b = ((ULONG)gbMulTable[(((bAccum >> bBits) & 0xff00) | texBits[0])] << bBits) + ditherVal; #endif
#else //!SHADE
#define BIGSHIFT 8
#if DITHER
#ifdef RSHIFT
r = ((ULONG)gbMulTable[(rAccum | texBits[2])] << RBITS) + ditherVal; g = ((ULONG)gbMulTable[(gAccum | texBits[1])] << GBITS) + ditherVal; b = ((ULONG)gbMulTable[(bAccum | texBits[0])] << BBITS) + ditherVal; #else
r = ((ULONG)gbMulTable[(rAccum | texBits[2])] << rBits) + ditherVal; g = ((ULONG)gbMulTable[(gAccum | texBits[1])] << gBits) + ditherVal; b = ((ULONG)gbMulTable[(bAccum | texBits[0])] << bBits) + ditherVal; #endif
#else //!DITHER
#if (!((BPP == 8) || (BPP == 16)))
#ifdef RSHIFT
r = (texBits[2] << RBITS); g = (texBits[1] << GBITS); b = (texBits[0] << BBITS); #else
r = (texBits[2] << rBits); g = (texBits[1] << gBits); b = (texBits[0] << bBits); #endif
#endif
#endif //DITHER
#endif //SHADE
#else //!TEXTURE
#define BIGSHIFT 16
r = rAccum + ditherVal; g = gAccum + ditherVal; b = bAccum + ditherVal; #endif //TEXTURE
#if !((TEXTURE) && !(SHADE) && !(DITHER) && ((BPP == 8) || (BPP == 16)))
#ifdef RSHIFT
color = ((r >> BIGSHIFT) << RSHIFT) | ((g >> BIGSHIFT) << GSHIFT) | ((b >> BIGSHIFT) << BSHIFT); #else
color = ((r >> BIGSHIFT) << rShift) | ((g >> BIGSHIFT) << gShift) | ((b >> BIGSHIFT) << bShift); #endif
#endif
#undef BIGSHIFT
#endif //RGBMODE
#if (TEXTURE) && !(SHADE) && !(DITHER) && ((BPP == 8) || (BPP == 16))
#if (BPP == 8)
*pPix = texBits[0]; #else
*((WORD *)pPix) = *((WORD *)texBits); #endif
#else
#if (BPP == 8)
*pPix = gengc->xlatPalette[color & 0xff]; #elif (BPP == 16)
*((WORD *)pPix) = (USHORT)color; #elif (BPP == 24)
*pPix = (BYTE)color; *(pPix + 1) = (BYTE)(color >> 8); *(pPix + 2) = (BYTE)(color >> 16); #else
*((DWORD *)pPix) = color; #endif // BPP
#endif
}
|