83 lines
2.8 KiB
C
83 lines
2.8 KiB
C
|
/******************************Module*Header*******************************\
|
||
|
* Module Name: spangen.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;
|
||
|
ULONG ditherVal;
|
||
|
|
||
|
if (flags & GEN_DITHER) {
|
||
|
ditherVal = pdither[iDither];
|
||
|
} else {
|
||
|
if ((flags & (GEN_SHADE | GEN_TEXTURE | GEN_RGBMODE)) ==
|
||
|
(GEN_SHADE | GEN_TEXTURE | GEN_RGBMODE)) {
|
||
|
ditherVal = 0x08;
|
||
|
} else {
|
||
|
ditherVal = 0x0000;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!(flags & GEN_RGBMODE)) {
|
||
|
if (BPP == 8) {
|
||
|
color = ((rAccum + ditherVal) >> 16) & 0xff;
|
||
|
} else {
|
||
|
color = ((PULONG)pXlat)[(((rAccum + ditherVal) >> 16) & 0xfff)];
|
||
|
}
|
||
|
} else {
|
||
|
if (flags & GEN_TEXTURE) {
|
||
|
texBits = (texAddr + ((sAccum & sMask) >> 14) +
|
||
|
((tAccum & tMask) >> tShift));
|
||
|
|
||
|
if (flags & GEN_SHADE) {
|
||
|
r = ((ULONG)(gbMulTable[(((rAccum >> rBits) & 0xff00) | texBits[2])] << rBits) + ditherVal) >> 8;
|
||
|
g = ((ULONG)(gbMulTable[(((gAccum >> gBits) & 0xff00) | texBits[1])] << gBits) + ditherVal) >> 8;
|
||
|
b = ((ULONG)(gbMulTable[(((bAccum >> bBits) & 0xff00) | texBits[0])] << bBits) + ditherVal) >> 8;
|
||
|
} else {
|
||
|
if (flags & GEN_DITHER) {
|
||
|
r = ((ULONG)(gbMulTable[(rAccum | texBits[2])] << rBits) + ditherVal) >> 8;
|
||
|
g = ((ULONG)(gbMulTable[(gAccum | texBits[1])] << gBits) + ditherVal) >> 8;
|
||
|
b = ((ULONG)(gbMulTable[(bAccum | texBits[0])] << bBits) + ditherVal) >> 8;
|
||
|
} else {
|
||
|
r = (texBits[2] << rBits) >> 8;
|
||
|
g = (texBits[1] << gBits) >> 8;
|
||
|
b = (texBits[0] << bBits) >> 8;
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
r = (rAccum + ditherVal) >> 16;
|
||
|
g = (gAccum + ditherVal) >> 16;
|
||
|
b = (bAccum + ditherVal) >> 16;
|
||
|
}
|
||
|
color = (r << rShift) |
|
||
|
(g << gShift) |
|
||
|
(b << bShift);
|
||
|
}
|
||
|
|
||
|
if (BPP == 8) {
|
||
|
*pPix = gengc->xlatPalette[color & 0xff];
|
||
|
#ifdef OLDWAY
|
||
|
if ((flags & (GEN_TEXTURE | GEN_SHADE | GEN_DITHER)) ==
|
||
|
GEN_TEXTURE) {
|
||
|
*pPix = (BYTE)color;
|
||
|
} else {
|
||
|
*pPix = (BYTE)pXlat[color & 0xff];
|
||
|
}
|
||
|
#endif
|
||
|
} else if (BPP == 16) {
|
||
|
*((WORD *)pPix) = (USHORT)color;
|
||
|
} else if (BPP == 24) {
|
||
|
*pPix = (BYTE)color;
|
||
|
*(pPix + 1) = (BYTE)(color >> 8);
|
||
|
*(pPix + 2) = (BYTE)(color >> 16);
|
||
|
} else {
|
||
|
*((DWORD *)pPix) = color;
|
||
|
}
|
||
|
}
|