From 5adf7463cddb42c3d1b10d6a4337fc98604d23cf Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Mon, 27 Mar 2017 21:59:43 +0200 Subject: [PATCH] - support render styles on decals --- src/polyrenderer/drawers/poly_draw_args.cpp | 59 ++++++++++++++++++++ src/polyrenderer/drawers/poly_draw_args.h | 1 + src/polyrenderer/scene/poly_decal.cpp | 3 +- src/polyrenderer/scene/poly_sprite.cpp | 61 +-------------------- 4 files changed, 62 insertions(+), 62 deletions(-) diff --git a/src/polyrenderer/drawers/poly_draw_args.cpp b/src/polyrenderer/drawers/poly_draw_args.cpp index 64fe7a882..a9bfde1f5 100644 --- a/src/polyrenderer/drawers/poly_draw_args.cpp +++ b/src/polyrenderer/drawers/poly_draw_args.cpp @@ -140,3 +140,62 @@ void PolyDrawArgs::DrawArray(const TriVertex *vertices, int vcount, PolyDrawMode mDrawMode = mode; PolyRenderer::Instance()->DrawQueue->Push(*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); + } +} diff --git a/src/polyrenderer/drawers/poly_draw_args.h b/src/polyrenderer/drawers/poly_draw_args.h index c19bb6492..a77ef7c98 100644 --- a/src/polyrenderer/drawers/poly_draw_args.h +++ b/src/polyrenderer/drawers/poly_draw_args.h @@ -61,6 +61,7 @@ public: void SetWriteSubsectorDepth(bool enable) { mWriteSubsector = enable; } 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(const FRenderStyle &renderstyle, double alpha, uint32_t fillcolor, uint32_t translationID, FTexture *texture, bool fullbright); void SetTransform(const TriMatrix *objectToClip) { mObjectToClip = objectToClip; } void SetColor(uint32_t bgra, uint8_t palindex); void DrawArray(const TriVertex *vertices, int vcount, PolyDrawMode mode = PolyDrawMode::Triangles); diff --git a/src/polyrenderer/scene/poly_decal.cpp b/src/polyrenderer/scene/poly_decal.cpp index 829f444b6..255b8e40a 100644 --- a/src/polyrenderer/scene/poly_decal.cpp +++ b/src/polyrenderer/scene/poly_decal.cpp @@ -134,10 +134,9 @@ void RenderPolyDecal::Render(const TriMatrix &worldToClip, const PolyClipPlane & PolyDrawArgs args; args.SetLight(GetColorTable(front->Colormap), lightlevel, PolyRenderer::Instance()->Light.WallGlobVis(foggy), fullbrightSprite); - args.SetTexture(tex, decal->Translation, true); args.SetSubsectorDepth(subsectorDepth); 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.SetFaceCullCCW(true); args.SetStencilTestValue(stencilValue); diff --git a/src/polyrenderer/scene/poly_sprite.cpp b/src/polyrenderer/scene/poly_sprite.cpp index 5d0587432..c67599580 100644 --- a/src/polyrenderer/scene/poly_sprite.cpp +++ b/src/polyrenderer/scene/poly_sprite.cpp @@ -144,67 +144,8 @@ void RenderPolySprite::Render(const TriMatrix &worldToClip, const PolyClipPlane args.SetFaceCullCCW(true); args.SetStencilTestValue(stencilValue); args.SetWriteStencil(true, stencilValue); - args.SetTexture(tex, thing->Translation); args.SetClipPlane(clipPlane); - - 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.SetStyle(thing->RenderStyle, thing->Alpha, thing->fillcolor, thing->Translation, tex, fullbrightSprite); args.SetSubsectorDepthTest(true); args.SetWriteSubsectorDepth(false); args.SetWriteStencil(false);