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: texspan2.h * * Calculate the textured pixel, and write the value to the framebuffer. * * 22-Nov-1995 ottob Created * * Copyright (c) 1995 Microsoft Corporation \**************************************************************************/
{ DWORD r, g, b;
#if (FLAT_SHADING || SMOOTH_SHADING)
#if (BPP == 8)
ULONG ditherVal = pdither[((ULONG_PTR)pPix) & 0x3]; #elif (BPP == 16)
ULONG ditherVal = pdither[((ULONG_PTR)pPix & 0x6) >> 1]; #endif
#endif
#if PALETTE_ENABLED
if (bPalette) { texBits = ((BYTE *)TEX_IMAGE + ((sResult & GENACCEL(gengc).sMask) >> S_SHIFT_PAL) + ((tResult & TMASK_SUBDIV) >> T_SHIFT_PAL));
texBits = (BYTE *)((ULONG *)TEX_PALETTE + *texBits);
} else { texBits = ((BYTE *)TEX_IMAGE + ((sResult & GENACCEL(gengc).sMask) >> S_SHIFT) + ((tResult & TMASK_SUBDIV) >> T_SHIFT)); }
#elif PALETTE_ONLY
texBits = ((BYTE *)TEX_IMAGE + ((sResult & GENACCEL(gengc).sMask) >> S_SHIFT_PAL) + ((tResult & TMASK_SUBDIV) >> T_SHIFT_PAL));
texBits = (BYTE *)((ULONG *)TEX_PALETTE + *texBits);
#else
texBits = ((BYTE *)TEX_IMAGE + ((sResult & GENACCEL(gengc).sMask) >> S_SHIFT) + ((tResult & TMASK_SUBDIV) >> T_SHIFT)); #endif
sResult += subDs; tResult += subDt;
#if (FAST_REPLACE)
{ #if (ALPHA)
if (texBits[3] != 0) { if (texBits[3] != 0xff) {
texBits = (texBits - GENACCEL(gengc).texImageReplace + (BYTE *)GENACCEL(gengc).texPalette);
ALPHA_NOMODULATE ALPHA_READ
#if (BPP == 32)
r = (((gbMulTable[aDisplay | texBits[2]] + rDisplay) << 8) << -RRIGHTSHIFTADJ) & RMASK; #else
r = (((gbMulTable[aDisplay | texBits[2]] + rDisplay) << 8) >> RRIGHTSHIFTADJ) & RMASK; #endif
g = (((gbMulTable[aDisplay | texBits[1]] + gDisplay) << 8) >> GRIGHTSHIFTADJ) & GMASK; b = (((gbMulTable[aDisplay | texBits[0]] + bDisplay) << 8) >> BRIGHTSHIFTADJ) & BMASK;
#if (BPP == 8)
*pPix = gengc->xlatPalette[r | g | b]; #elif (BPP == 16)
*((USHORT *)pPix) = (USHORT)(r | g | b); #else
*((USHORT UNALIGNED *)pPix) = (USHORT)(g | b); pPix[2] = (BYTE)(r >> 16); #endif
} else { #if (BPP > 16)
ULONG texel = *((ULONG *)texBits); #endif
#if (BPP == 8)
*pPix = *texBits; #elif (BPP == 16)
*((USHORT *)pPix) = *((USHORT *)texBits); #else
*((USHORT UNALIGNED *)pPix) = (USHORT)texel; pPix[2] = (BYTE)(texel >> 16); #endif
} } #else
{ #if (BPP > 16)
ULONG texel = *((ULONG *)texBits); #endif
#if (BPP == 8)
*pPix = *texBits; #elif (BPP == 16)
*((USHORT *)pPix) = *((USHORT *)texBits); #else
*((USHORT UNALIGNED *)pPix) = (USHORT)texel; pPix[2] = (BYTE)(texel >> 16); #endif
} #endif
}
#elif (REPLACE)
{ #if (ALPHA)
if (texBits[3] != 0) { if (texBits[3] != 0xff) {
ALPHA_NOMODULATE ALPHA_READ
#if (BPP == 32)
r = (((gbMulTable[aDisplay | texBits[2]] + rDisplay) << 8) << -RRIGHTSHIFTADJ) & RMASK; #else
r = (((gbMulTable[aDisplay | texBits[2]] + rDisplay) << 8) >> RRIGHTSHIFTADJ) & RMASK; #endif
g = (((gbMulTable[aDisplay | texBits[1]] + gDisplay) << 8) >> GRIGHTSHIFTADJ) & GMASK; b = (((gbMulTable[aDisplay | texBits[0]] + bDisplay) << 8) >> BRIGHTSHIFTADJ) & BMASK; } else { #if (BPP == 32)
r = ((texBits[2] << 8) << -RRIGHTSHIFTADJ) & RMASK; #else
r = ((texBits[2] << 8) >> RRIGHTSHIFTADJ) & RMASK; #endif
g = ((texBits[1] << 8) >> GRIGHTSHIFTADJ) & GMASK; b = ((texBits[0] << 8) >> BRIGHTSHIFTADJ) & BMASK; }
#if (BPP == 8)
*pPix = gengc->xlatPalette[r | g | b]; #elif (BPP == 16)
*((USHORT *)pPix) = (USHORT)(r | g | b); #else
*((USHORT UNALIGNED *)pPix) = (USHORT)(g | b); pPix[2] = (BYTE)(r >> 16); #endif
} #else
#if (BPP != 32)
r = ((texBits[2] << 8) >> RRIGHTSHIFTADJ) & RMASK; g = ((texBits[1] << 8) >> GRIGHTSHIFTADJ) & GMASK; b = ((texBits[0] << 8) >> BRIGHTSHIFTADJ) & BMASK; #endif
#if (BPP == 8)
*pPix = gengc->xlatPalette[r | g | b]; #elif (BPP == 16)
*((USHORT *)pPix) = (USHORT)(r | g | b); #else
*((USHORT UNALIGNED *)pPix) = *((USHORT *)texBits); pPix[2] = (BYTE)texBits[2]; #endif
#endif
}
#elif (FLAT_SHADING)
{ #if (ALPHA)
if (texBits[3] != 0) {
ALPHA_MODULATE; ALPHA_READ;
#if (BPP == 32)
r = ((((gbMulTable[aDisplay | gbMulTable[rAccum | texBits[2]]] + rDisplay) << (8+RBITS)) + ditherVal) << -RRIGHTSHIFTADJ) & RMASK; #else
r = ((((gbMulTable[aDisplay | gbMulTable[rAccum | texBits[2]]] + rDisplay) << (8+RBITS)) + ditherVal) >> RRIGHTSHIFTADJ) & RMASK; #endif
g = ((((gbMulTable[aDisplay | gbMulTable[gAccum | texBits[1]]] + gDisplay) << (8+GBITS)) + ditherVal) >> GRIGHTSHIFTADJ) & GMASK; b = ((((gbMulTable[aDisplay | gbMulTable[bAccum | texBits[0]]] + bDisplay) << (8+BBITS)) + ditherVal) >> BRIGHTSHIFTADJ) & BMASK;
#if (BPP == 8)
*pPix = gengc->xlatPalette[r | g | b]; #elif (BPP == 16)
*((USHORT *)pPix) = (USHORT)(r | g | b); #else
*((USHORT UNALIGNED *)pPix) = (USHORT)(g | b); pPix[2] = (BYTE)(r >> 16); #endif
}
#else
#if (BPP == 32)
r = (((gbMulTable[rAccum | texBits[2]] << (8+RBITS)) + ditherVal) << -RRIGHTSHIFTADJ) & RMASK; #else
r = (((gbMulTable[rAccum | texBits[2]] << (8+RBITS)) + ditherVal) >> RRIGHTSHIFTADJ) & RMASK; #endif
g = (((gbMulTable[gAccum | texBits[1]] << (8+GBITS)) + ditherVal) >> GRIGHTSHIFTADJ) & GMASK; b = (((gbMulTable[bAccum | texBits[0]] << (8+BBITS)) + ditherVal) >> BRIGHTSHIFTADJ) & BMASK;
#if (BPP == 8)
*pPix = gengc->xlatPalette[r | g | b]; #elif (BPP == 16)
*((USHORT *)pPix) = (USHORT)(r | g | b); #else
*((USHORT UNALIGNED *)pPix) = (USHORT)(g | b); pPix[2] = (BYTE)(r >> 16); #endif
#endif
}
#else // SMOOTH_SHADING
{ #if (ALPHA)
if (texBits[3] != 0) {
ALPHA_MODULATE; ALPHA_READ;
#if (BPP == 32)
r = ((((gbMulTable[aDisplay | gbMulTable[((rAccum >> RBITS) & 0xff00) | texBits[2]]] + rDisplay) << (8+RBITS)) + ditherVal) << -RRIGHTSHIFTADJ) & RMASK; #else
r = ((((gbMulTable[aDisplay | gbMulTable[((rAccum >> RBITS) & 0xff00) | texBits[2]]] + rDisplay) << (8+RBITS)) + ditherVal) >> RRIGHTSHIFTADJ) & RMASK; #endif
g = ((((gbMulTable[aDisplay | gbMulTable[((gAccum >> GBITS) & 0xff00) | texBits[1]]] + gDisplay) << (8+GBITS)) + ditherVal) >> GRIGHTSHIFTADJ) & GMASK; b = ((((gbMulTable[aDisplay | gbMulTable[((bAccum >> BBITS) & 0xff00) | texBits[0]]] + bDisplay) << (8+BBITS)) + ditherVal) >> BRIGHTSHIFTADJ) & BMASK;
#if (BPP == 8)
*pPix = gengc->xlatPalette[r | g | b]; #elif (BPP == 16)
*((USHORT *)pPix) = (USHORT)(r | g | b); #else
*((USHORT UNALIGNED *)pPix) = (USHORT)(g | b); pPix[2] = (BYTE)(r >> 16); #endif
} #else
#if (BPP == 32)
r = (((gbMulTable[((rAccum >> RBITS) & 0xff00) | texBits[2]] << (8+RBITS)) + ditherVal) << -RRIGHTSHIFTADJ) & RMASK; #else
r = (((gbMulTable[((rAccum >> RBITS) & 0xff00) | texBits[2]] << (8+RBITS)) + ditherVal) >> RRIGHTSHIFTADJ) & RMASK; #endif
g = (((gbMulTable[((gAccum >> GBITS) & 0xff00) | texBits[1]] << (8+GBITS)) + ditherVal) >> GRIGHTSHIFTADJ) & GMASK; b = (((gbMulTable[((bAccum >> BBITS) & 0xff00) | texBits[0]] << (8+BBITS)) + ditherVal) >> BRIGHTSHIFTADJ) & BMASK;
#if (BPP == 8)
*pPix = gengc->xlatPalette[r | g | b]; #elif (BPP == 16)
*((USHORT *)pPix) = (USHORT)(r | g | b); #else
*((USHORT UNALIGNED *)pPix) = (USHORT)(g | b); pPix[2] = (BYTE)(r >> 16); #endif
#endif
} #endif
}
|