mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 23:02:08 +00:00
- support render styles on decals
This commit is contained in:
parent
0537e9c1ba
commit
5adf7463cd
4 changed files with 62 additions and 62 deletions
|
@ -140,3 +140,62 @@ void PolyDrawArgs::DrawArray(const TriVertex *vertices, int vcount, PolyDrawMode
|
||||||
mDrawMode = mode;
|
mDrawMode = mode;
|
||||||
PolyRenderer::Instance()->DrawQueue->Push<DrawPolyTrianglesCommand>(*this, PolyTriangleDrawer::is_mirror());
|
PolyRenderer::Instance()->DrawQueue->Push<DrawPolyTrianglesCommand>(*this, PolyTriangleDrawer::is_mirror());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PolyDrawArgs::SetStyle(const FRenderStyle &renderstyle, double alpha, uint32_t fillcolor, uint32_t translationID, FTexture *tex, bool fullbright)
|
||||||
|
{
|
||||||
|
bool forcePal = (renderstyle == LegacyRenderStyles[STYLE_Shaded] || renderstyle == LegacyRenderStyles[STYLE_AddShaded]);
|
||||||
|
SetTexture(tex, translationID, forcePal);
|
||||||
|
|
||||||
|
if (renderstyle == LegacyRenderStyles[STYLE_Normal] || (r_drawfuzz == 0 && renderstyle == LegacyRenderStyles[STYLE_OptFuzzy]))
|
||||||
|
{
|
||||||
|
SetStyle(Translation() ? TriBlendMode::TranslatedAdd : TriBlendMode::TextureAdd, 1.0, 0.0);
|
||||||
|
}
|
||||||
|
else if (renderstyle == LegacyRenderStyles[STYLE_Add] && fullbright && alpha == 1.0 && !Translation())
|
||||||
|
{
|
||||||
|
SetStyle(TriBlendMode::TextureAddSrcColor, 1.0, 1.0);
|
||||||
|
}
|
||||||
|
else if (renderstyle == LegacyRenderStyles[STYLE_Add])
|
||||||
|
{
|
||||||
|
SetStyle(Translation() ? TriBlendMode::TranslatedAdd : TriBlendMode::TextureAdd, alpha, 1.0);
|
||||||
|
}
|
||||||
|
else if (renderstyle == LegacyRenderStyles[STYLE_Subtract])
|
||||||
|
{
|
||||||
|
SetStyle(Translation() ? TriBlendMode::TranslatedRevSub : TriBlendMode::TextureRevSub, alpha, 1.0);
|
||||||
|
}
|
||||||
|
else if (renderstyle == LegacyRenderStyles[STYLE_SoulTrans])
|
||||||
|
{
|
||||||
|
SetStyle(Translation() ? TriBlendMode::TranslatedAdd : TriBlendMode::TextureAdd, transsouls, 1.0 - transsouls);
|
||||||
|
}
|
||||||
|
else if (renderstyle == LegacyRenderStyles[STYLE_Fuzzy] || (r_drawfuzz == 2 && renderstyle == LegacyRenderStyles[STYLE_OptFuzzy]))
|
||||||
|
{ // NYI - Fuzzy - for now, just a copy of "Shadow"
|
||||||
|
SetStyle(Translation() ? TriBlendMode::TranslatedAdd : TriBlendMode::TextureAdd, 0.0, 160 / 255.0);
|
||||||
|
}
|
||||||
|
else if (renderstyle == LegacyRenderStyles[STYLE_Shadow] || (r_drawfuzz == 1 && renderstyle == LegacyRenderStyles[STYLE_OptFuzzy]))
|
||||||
|
{
|
||||||
|
SetStyle(Translation() ? TriBlendMode::TranslatedAdd : TriBlendMode::TextureAdd, 0.0, 160 / 255.0);
|
||||||
|
}
|
||||||
|
else if (renderstyle == LegacyRenderStyles[STYLE_TranslucentStencil])
|
||||||
|
{
|
||||||
|
SetColor(0xff000000 | fillcolor, fillcolor >> 24);
|
||||||
|
SetStyle(TriBlendMode::Stencil, alpha, 1.0 - alpha);
|
||||||
|
}
|
||||||
|
else if (renderstyle == LegacyRenderStyles[STYLE_AddStencil])
|
||||||
|
{
|
||||||
|
SetColor(0xff000000 | fillcolor, fillcolor >> 24);
|
||||||
|
SetStyle(TriBlendMode::AddStencil, alpha, 1.0);
|
||||||
|
}
|
||||||
|
else if (renderstyle == LegacyRenderStyles[STYLE_Shaded])
|
||||||
|
{
|
||||||
|
SetColor(0xff000000 | fillcolor, fillcolor >> 24);
|
||||||
|
SetStyle(TriBlendMode::Shaded, alpha, 1.0 - alpha);
|
||||||
|
}
|
||||||
|
else if (renderstyle == LegacyRenderStyles[STYLE_AddShaded])
|
||||||
|
{
|
||||||
|
SetColor(0xff000000 | fillcolor, fillcolor >> 24);
|
||||||
|
SetStyle(TriBlendMode::AddShaded, alpha, 1.0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetStyle(Translation() ? TriBlendMode::TranslatedAdd : TriBlendMode::TextureAdd, alpha, 1.0 - alpha);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -61,6 +61,7 @@ public:
|
||||||
void SetWriteSubsectorDepth(bool enable) { mWriteSubsector = enable; }
|
void SetWriteSubsectorDepth(bool enable) { mWriteSubsector = enable; }
|
||||||
void SetFaceCullCCW(bool counterclockwise) { mFaceCullCCW = counterclockwise; }
|
void SetFaceCullCCW(bool counterclockwise) { mFaceCullCCW = counterclockwise; }
|
||||||
void SetStyle(TriBlendMode blendmode, double srcalpha = 1.0, double destalpha = 1.0) { mBlendMode = blendmode; mSrcAlpha = (uint32_t)(srcalpha * 256.0 + 0.5); mDestAlpha = (uint32_t)(destalpha * 256.0 + 0.5); }
|
void SetStyle(TriBlendMode blendmode, double srcalpha = 1.0, double destalpha = 1.0) { mBlendMode = blendmode; mSrcAlpha = (uint32_t)(srcalpha * 256.0 + 0.5); mDestAlpha = (uint32_t)(destalpha * 256.0 + 0.5); }
|
||||||
|
void SetStyle(const FRenderStyle &renderstyle, double alpha, uint32_t fillcolor, uint32_t translationID, FTexture *texture, bool fullbright);
|
||||||
void SetTransform(const TriMatrix *objectToClip) { mObjectToClip = objectToClip; }
|
void SetTransform(const TriMatrix *objectToClip) { mObjectToClip = objectToClip; }
|
||||||
void SetColor(uint32_t bgra, uint8_t palindex);
|
void SetColor(uint32_t bgra, uint8_t palindex);
|
||||||
void DrawArray(const TriVertex *vertices, int vcount, PolyDrawMode mode = PolyDrawMode::Triangles);
|
void DrawArray(const TriVertex *vertices, int vcount, PolyDrawMode mode = PolyDrawMode::Triangles);
|
||||||
|
|
|
@ -134,10 +134,9 @@ void RenderPolyDecal::Render(const TriMatrix &worldToClip, const PolyClipPlane &
|
||||||
|
|
||||||
PolyDrawArgs args;
|
PolyDrawArgs args;
|
||||||
args.SetLight(GetColorTable(front->Colormap), lightlevel, PolyRenderer::Instance()->Light.WallGlobVis(foggy), fullbrightSprite);
|
args.SetLight(GetColorTable(front->Colormap), lightlevel, PolyRenderer::Instance()->Light.WallGlobVis(foggy), fullbrightSprite);
|
||||||
args.SetTexture(tex, decal->Translation, true);
|
|
||||||
args.SetSubsectorDepth(subsectorDepth);
|
args.SetSubsectorDepth(subsectorDepth);
|
||||||
args.SetColor(0xff000000 | decal->AlphaColor, decal->AlphaColor >> 24);
|
args.SetColor(0xff000000 | decal->AlphaColor, decal->AlphaColor >> 24);
|
||||||
args.SetStyle(TriBlendMode::Shaded, decal->Alpha, 1.0 - decal->Alpha); // R_SetPatchStyle (decal->RenderStyle, (float)decal->Alpha, decal->Translation, decal->AlphaColor);
|
args.SetStyle(decal->RenderStyle, decal->Alpha, decal->AlphaColor, decal->Translation, tex, false);
|
||||||
args.SetTransform(&worldToClip);
|
args.SetTransform(&worldToClip);
|
||||||
args.SetFaceCullCCW(true);
|
args.SetFaceCullCCW(true);
|
||||||
args.SetStencilTestValue(stencilValue);
|
args.SetStencilTestValue(stencilValue);
|
||||||
|
|
|
@ -144,67 +144,8 @@ void RenderPolySprite::Render(const TriMatrix &worldToClip, const PolyClipPlane
|
||||||
args.SetFaceCullCCW(true);
|
args.SetFaceCullCCW(true);
|
||||||
args.SetStencilTestValue(stencilValue);
|
args.SetStencilTestValue(stencilValue);
|
||||||
args.SetWriteStencil(true, stencilValue);
|
args.SetWriteStencil(true, stencilValue);
|
||||||
args.SetTexture(tex, thing->Translation);
|
|
||||||
args.SetClipPlane(clipPlane);
|
args.SetClipPlane(clipPlane);
|
||||||
|
args.SetStyle(thing->RenderStyle, thing->Alpha, thing->fillcolor, thing->Translation, tex, fullbrightSprite);
|
||||||
if (thing->RenderStyle == LegacyRenderStyles[STYLE_Normal] ||
|
|
||||||
(r_drawfuzz == 0 && thing->RenderStyle == LegacyRenderStyles[STYLE_OptFuzzy]))
|
|
||||||
{
|
|
||||||
args.SetStyle(args.Translation() ? TriBlendMode::TranslatedAdd : TriBlendMode::TextureAdd, 1.0, 0.0);
|
|
||||||
}
|
|
||||||
else if (thing->RenderStyle == LegacyRenderStyles[STYLE_Add] && fullbrightSprite && thing->Alpha == 1.0 && !args.Translation())
|
|
||||||
{
|
|
||||||
args.SetStyle(TriBlendMode::TextureAddSrcColor, 1.0, 1.0);
|
|
||||||
}
|
|
||||||
else if (thing->RenderStyle == LegacyRenderStyles[STYLE_Add])
|
|
||||||
{
|
|
||||||
args.SetStyle(args.Translation() ? TriBlendMode::TranslatedAdd : TriBlendMode::TextureAdd, thing->Alpha, 1.0);
|
|
||||||
}
|
|
||||||
else if (thing->RenderStyle == LegacyRenderStyles[STYLE_Subtract])
|
|
||||||
{
|
|
||||||
args.SetStyle(args.Translation() ? TriBlendMode::TranslatedRevSub : TriBlendMode::TextureRevSub, thing->Alpha, 1.0);
|
|
||||||
}
|
|
||||||
else if (thing->RenderStyle == LegacyRenderStyles[STYLE_SoulTrans])
|
|
||||||
{
|
|
||||||
args.SetStyle(args.Translation() ? TriBlendMode::TranslatedAdd : TriBlendMode::TextureAdd, transsouls, 1.0 - transsouls);
|
|
||||||
}
|
|
||||||
else if (thing->RenderStyle == LegacyRenderStyles[STYLE_Fuzzy] ||
|
|
||||||
(r_drawfuzz == 2 && thing->RenderStyle == LegacyRenderStyles[STYLE_OptFuzzy]))
|
|
||||||
{ // NYI - Fuzzy - for now, just a copy of "Shadow"
|
|
||||||
args.SetStyle(args.Translation() ? TriBlendMode::TranslatedAdd : TriBlendMode::TextureAdd, 0.0, 160 / 255.0);
|
|
||||||
}
|
|
||||||
else if (thing->RenderStyle == LegacyRenderStyles[STYLE_Shadow] ||
|
|
||||||
(r_drawfuzz == 1 && thing->RenderStyle == LegacyRenderStyles[STYLE_OptFuzzy]))
|
|
||||||
{
|
|
||||||
args.SetStyle(args.Translation() ? TriBlendMode::TranslatedAdd : TriBlendMode::TextureAdd, 0.0, 160 / 255.0);
|
|
||||||
}
|
|
||||||
else if (thing->RenderStyle == LegacyRenderStyles[STYLE_TranslucentStencil])
|
|
||||||
{
|
|
||||||
args.SetColor(0xff000000 | thing->fillcolor, thing->fillcolor >> 24);
|
|
||||||
args.SetStyle(TriBlendMode::Stencil, thing->Alpha, 1.0 - thing->Alpha);
|
|
||||||
}
|
|
||||||
else if (thing->RenderStyle == LegacyRenderStyles[STYLE_AddStencil])
|
|
||||||
{
|
|
||||||
args.SetColor(0xff000000 | thing->fillcolor, thing->fillcolor >> 24);
|
|
||||||
args.SetStyle(TriBlendMode::AddStencil, thing->Alpha, 1.0);
|
|
||||||
}
|
|
||||||
else if (thing->RenderStyle == LegacyRenderStyles[STYLE_Shaded])
|
|
||||||
{
|
|
||||||
args.SetColor(0xff000000 | thing->fillcolor, thing->fillcolor >> 24);
|
|
||||||
args.SetStyle(TriBlendMode::Shaded, thing->Alpha, 1.0 - thing->Alpha);
|
|
||||||
args.SetTexture(tex, thing->Translation, true);
|
|
||||||
}
|
|
||||||
else if (thing->RenderStyle == LegacyRenderStyles[STYLE_AddShaded])
|
|
||||||
{
|
|
||||||
args.SetColor(0xff000000 | thing->fillcolor, thing->fillcolor >> 24);
|
|
||||||
args.SetStyle(TriBlendMode::AddShaded, thing->Alpha, 1.0);
|
|
||||||
args.SetTexture(tex, thing->Translation, true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
args.SetStyle(args.Translation() ? TriBlendMode::TranslatedAdd : TriBlendMode::TextureAdd, thing->Alpha, 1.0 - thing->Alpha);
|
|
||||||
}
|
|
||||||
|
|
||||||
args.SetSubsectorDepthTest(true);
|
args.SetSubsectorDepthTest(true);
|
||||||
args.SetWriteSubsectorDepth(false);
|
args.SetWriteSubsectorDepth(false);
|
||||||
args.SetWriteStencil(false);
|
args.SetWriteStencil(false);
|
||||||
|
|
Loading…
Reference in a new issue