Files
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

92 lines
2.2 KiB
C++

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
FeatureGrid::BLENDFUNCTION (
FeatureInstance *featureInstance,
unsigned char *pix_buf,
int start_span,
int end_span,
int downScale
)
{
unsigned char *data_ptr = featureInstance->currentTexturePtr;
int texture_width = (featureInstance->feature->featureTexture->width) >> downScale;
int count_down = featureInstance->countDownToBorder;
#ifdef SHOW_MATERIAL
DWORD mat_color = downScale & 0xffffff;
downScale >>= 24;
#endif
#ifdef TEXTURE_HORIZONTAL_FLIP
#else
#endif
WORD *data_ptr_word = (WORD *)data_ptr;
#ifdef TEXTURE_HORIZONTAL_FLIP
int i, j;
for(i=0,j=0;i<end_span-start_span;i++,j--)
#else
for(int i=0;i<end_span-start_span;i++)
#endif
{
#ifdef TEXTURE_HORIZONTAL_FLIP
int alpha = (data_ptr_word[j] & 0xf) << 4;
#ifdef SHOW_MATERIAL
if(alpha>0x80)
{
*(DWORD *)pix_buf = mat_color;
}
#else // SHOW_MATERIAL
if(alpha>0)
{
int col = *pix_buf*(0xf0-alpha) + (data_ptr_word[j] & 0xf0)*alpha;
*pix_buf = static_cast<unsigned char>(col>>8);
col = *(pix_buf+1)*(0xf0-alpha) + ((data_ptr_word[j] & 0xf00)>>4)*alpha;
*(pix_buf+1) = static_cast<unsigned char>(col>>8);
col = *(pix_buf+2)*(0xf0-alpha) + ((data_ptr_word[j] & 0xf000)>>8)*alpha;
*(pix_buf+2) = static_cast<unsigned char>(col>>8);
}
#endif // SHOW_MATERIAL
if(--count_down <= 0)
{
data_ptr_word += texture_width;
count_down = texture_width;
}
#else
int alpha = (data_ptr_word[i] & 0xf) << 4;
#ifdef SHOW_MATERIAL
if(alpha>0x80)
{
*(DWORD *)pix_buf = mat_color;
}
#else // SHOW_MATERIAL
if(alpha>0)
{
int col = *pix_buf*(0xf0-alpha) + (data_ptr_word[i] & 0xf0)*alpha;
*pix_buf = static_cast<unsigned char>(col>>8);
col = *(pix_buf+1)*(0xf0-alpha) + ((data_ptr_word[i] & 0xf00)>>4)*alpha;
*(pix_buf+1) = static_cast<unsigned char>(col>>8);
col = *(pix_buf+2)*(0xf0-alpha) + ((data_ptr_word[i] & 0xf000)>>8)*alpha;
*(pix_buf+2) = static_cast<unsigned char>(col>>8);
}
#endif // SHOW_MATERIAL
if(--count_down <= 0)
{
data_ptr_word -= texture_width;
count_down = texture_width;
}
#endif
pix_buf += colorDepth;
}
}