- Added support for defining the full color range of a special colormap.
SVN r1865 (trunk)
This commit is contained in:
parent
79298285f7
commit
84a018f05a
23 changed files with 113 additions and 108 deletions
|
|
@ -224,9 +224,7 @@ const char *const D3DFB::ShaderNames[D3DFB::NUM_SHADERS] =
|
|||
"VertexColor.pso",
|
||||
|
||||
"SpecialColormap.pso",
|
||||
"SpecialColormapInv.pso",
|
||||
"SpecialColorMapPal.pso",
|
||||
"SpecialColorMapPalInv.pso",
|
||||
|
||||
"InGameColormap.pso",
|
||||
"InGameColormapDesat.pso",
|
||||
|
|
@ -2984,8 +2982,7 @@ void D3DFB::EndQuadBatch()
|
|||
{
|
||||
int select;
|
||||
|
||||
select = !!(quad->Flags & BQF_InvertSource);
|
||||
select |= !!(quad->Flags & BQF_Paletted) << 1;
|
||||
select = !!(quad->Flags & BQF_Paletted);
|
||||
SetPixelShader(Shaders[SHADER_SpecialColormap + select]);
|
||||
}
|
||||
else if (quad->ShaderNum == BQS_InGameColormap)
|
||||
|
|
@ -3115,47 +3112,7 @@ bool D3DFB::SetStyle(D3DTex *tex, DrawParms &parms, D3DCOLOR &color0, D3DCOLOR &
|
|||
|
||||
SetColorOverlay(parms.colorOverlay, alpha, color0, color1);
|
||||
|
||||
if (parms.specialcolormap != NULL)
|
||||
{ // Emulate an invulnerability or similar colormap.
|
||||
if (style.Flags & STYLEF_InvertSource)
|
||||
{
|
||||
quad.Flags |= BQF_InvertSource;
|
||||
}
|
||||
if (fmt == D3DFMT_L8)
|
||||
{
|
||||
quad.Flags |= BQF_GamePalette;
|
||||
}
|
||||
quad.ShaderNum = BQS_SpecialColormap;
|
||||
color0 = D3DCOLOR_COLORVALUE(parms.specialcolormap->Colorize[0]/2,
|
||||
parms.specialcolormap->Colorize[1]/2, parms.specialcolormap->Colorize[2]/2, 1);
|
||||
color1 = D3DCOLOR_ARGB(255,0,0,0);
|
||||
}
|
||||
else if (parms.colormapstyle != NULL)
|
||||
{ // Emulate the fading from an in-game colormap (colorized, faded, and desaturated)
|
||||
if (style.Flags & STYLEF_InvertSource)
|
||||
{
|
||||
quad.Flags |= BQF_InvertSource;
|
||||
}
|
||||
if (fmt == D3DFMT_L8)
|
||||
{
|
||||
quad.Flags |= BQF_GamePalette;
|
||||
}
|
||||
if (parms.colormapstyle->Desaturate != 0)
|
||||
{
|
||||
quad.Flags |= BQF_Desaturated;
|
||||
}
|
||||
quad.ShaderNum = BQS_InGameColormap;
|
||||
color0 = D3DCOLOR_ARGB(parms.colormapstyle->Desaturate,
|
||||
parms.colormapstyle->Color.r,
|
||||
parms.colormapstyle->Color.g,
|
||||
parms.colormapstyle->Color.b);
|
||||
double fadelevel = parms.colormapstyle->FadeLevel;
|
||||
color1 = D3DCOLOR_ARGB(DWORD((1 - fadelevel) * 255),
|
||||
DWORD(parms.colormapstyle->Fade.r * fadelevel),
|
||||
DWORD(parms.colormapstyle->Fade.g * fadelevel),
|
||||
DWORD(parms.colormapstyle->Fade.b * fadelevel));
|
||||
}
|
||||
else if (style.Flags & STYLEF_ColorIsFixed)
|
||||
if (style.Flags & STYLEF_ColorIsFixed)
|
||||
{
|
||||
if (style.Flags & STYLEF_InvertSource)
|
||||
{ // Since the source color is a constant, we can invert it now
|
||||
|
|
@ -3219,10 +3176,42 @@ bool D3DFB::SetStyle(D3DTex *tex, DrawParms &parms, D3DCOLOR &color0, D3DCOLOR &
|
|||
{
|
||||
quad.Flags |= BQF_InvertSource;
|
||||
}
|
||||
|
||||
if (parms.specialcolormap != NULL)
|
||||
{ // Emulate an invulnerability or similar colormap.
|
||||
float *start, *end;
|
||||
start = parms.specialcolormap->ColorizeStart;
|
||||
end = parms.specialcolormap->ColorizeEnd;
|
||||
if (quad.Flags & BQF_InvertSource)
|
||||
{
|
||||
quad.Flags &= ~BQF_InvertSource;
|
||||
swap(start, end);
|
||||
}
|
||||
quad.ShaderNum = BQS_SpecialColormap;
|
||||
color0 = D3DCOLOR_RGBA(DWORD(start[0]/2*255), DWORD(start[1]/2*255), DWORD(start[2]/2*255), color0 >> 24);
|
||||
color1 = D3DCOLOR_RGBA(DWORD(end[0]/2*255), DWORD(end[1]/2*255), DWORD(end[2]/2*255), color1 >> 24);
|
||||
}
|
||||
else if (parms.colormapstyle != NULL)
|
||||
{ // Emulate the fading from an in-game colormap (colorized, faded, and desaturated)
|
||||
if (parms.colormapstyle->Desaturate != 0)
|
||||
{
|
||||
quad.Flags |= BQF_Desaturated;
|
||||
}
|
||||
quad.ShaderNum = BQS_InGameColormap;
|
||||
color0 = D3DCOLOR_ARGB(parms.colormapstyle->Desaturate,
|
||||
parms.colormapstyle->Color.r,
|
||||
parms.colormapstyle->Color.g,
|
||||
parms.colormapstyle->Color.b);
|
||||
double fadelevel = parms.colormapstyle->FadeLevel;
|
||||
color1 = D3DCOLOR_ARGB(DWORD((1 - fadelevel) * 255),
|
||||
DWORD(parms.colormapstyle->Fade.r * fadelevel),
|
||||
DWORD(parms.colormapstyle->Fade.g * fadelevel),
|
||||
DWORD(parms.colormapstyle->Fade.b * fadelevel));
|
||||
}
|
||||
}
|
||||
|
||||
// For unmasked images, force the alpha from the image data to be ignored.
|
||||
if (!parms.masked)
|
||||
if (!parms.masked && quad.ShaderNum != BQS_InGameColormap)
|
||||
{
|
||||
color0 = (color0 & D3DCOLOR_RGBA(255, 255, 255, 0)) | D3DCOLOR_COLORVALUE(0, 0, 0, alpha);
|
||||
color1 &= D3DCOLOR_RGBA(255, 255, 255, 0);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue