From 811d96e07e1ad852b778587c46e77758b4290cd5 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 29 Mar 2018 23:21:25 +0200 Subject: [PATCH] D3D 2D code refactored but not tested yet. --- src/gl/renderer/gl_renderer.cpp | 1 - src/v_2ddrawer.cpp | 14 + src/v_video.h | 2 +- src/win32/fb_d3d9.cpp | 360 ++++++++++-------- src/win32/fb_d3d9_wipe.cpp | 2 +- src/win32/win32swiface.h | 39 +- wadsrc/static/shaders/d3d/shaders.ps | 74 ++-- wadsrc/static/shaders/d3d/sm20/AlphaTex.pso | Bin 0 -> 364 bytes wadsrc/static/shaders/d3d/sm20/BurnWipe.pso | Bin 300 -> 304 bytes .../shaders/d3d/sm20/GammaCorrection.pso | Bin 328 -> 332 bytes .../shaders/d3d/sm20/InGameColormap.pso | Bin 256 -> 0 bytes .../shaders/d3d/sm20/InGameColormapDesat.pso | Bin 388 -> 0 bytes .../shaders/d3d/sm20/InGameColormapInv.pso | Bin 316 -> 0 bytes .../d3d/sm20/InGameColormapInvDesat.pso | Bin 404 -> 0 bytes .../shaders/d3d/sm20/InGameColormapPal.pso | Bin 396 -> 0 bytes .../d3d/sm20/InGameColormapPalDesat.pso | Bin 512 -> 0 bytes .../shaders/d3d/sm20/InGameColormapPalInv.pso | Bin 440 -> 0 bytes .../d3d/sm20/InGameColormapPalInvDesat.pso | Bin 528 -> 0 bytes .../static/shaders/d3d/sm20/NormalColor.pso | Bin 252 -> 276 bytes .../static/shaders/d3d/sm20/NormalColorD.pso | Bin 0 -> 388 bytes .../shaders/d3d/sm20/NormalColorInv.pso | Bin 312 -> 404 bytes .../shaders/d3d/sm20/NormalColorInvOpaq.pso | Bin 0 -> 440 bytes .../shaders/d3d/sm20/NormalColorOpaq.pso | Bin 0 -> 424 bytes .../shaders/d3d/sm20/NormalColorPal.pso | Bin 392 -> 400 bytes .../shaders/d3d/sm20/NormalColorPalD.pso | Bin 0 -> 512 bytes .../shaders/d3d/sm20/NormalColorPalInv.pso | Bin 436 -> 528 bytes .../d3d/sm20/NormalColorPalInvOpaq.pso | Bin 0 -> 564 bytes .../shaders/d3d/sm20/NormalColorPalOpaq.pso | Bin 0 -> 548 bytes .../static/shaders/d3d/sm20/PalAlphaTex.pso | Bin 0 -> 488 bytes wadsrc/static/shaders/d3d/sm20/PalStencil.pso | Bin 0 -> 456 bytes wadsrc/static/shaders/d3d/sm20/RedToAlpha.pso | Bin 272 -> 0 bytes .../static/shaders/d3d/sm20/RedToAlphaInv.pso | Bin 328 -> 0 bytes .../shaders/d3d/sm20/SpecialColormap.pso | Bin 364 -> 380 bytes .../shaders/d3d/sm20/SpecialColormapPal.pso | Bin 488 -> 504 bytes wadsrc/static/shaders/d3d/sm20/Stencil.pso | Bin 0 -> 332 bytes .../static/shaders/d3d/sm20/VertexColor.pso | Bin 124 -> 128 bytes wadsrc/static/shaders/d3d/sm20/build.bat | 38 +- wadsrc/static/shaders/d3d/sm30/AlphaTex.pso | Bin 0 -> 336 bytes wadsrc/static/shaders/d3d/sm30/BurnWipe.pso | Bin 300 -> 304 bytes .../shaders/d3d/sm30/GammaCorrection.pso | Bin 328 -> 332 bytes .../shaders/d3d/sm30/InGameColormap.pso | Bin 244 -> 0 bytes .../shaders/d3d/sm30/InGameColormapDesat.pso | Bin 376 -> 0 bytes .../shaders/d3d/sm30/InGameColormapInv.pso | Bin 304 -> 0 bytes .../d3d/sm30/InGameColormapInvDesat.pso | Bin 392 -> 0 bytes .../shaders/d3d/sm30/InGameColormapPal.pso | Bin 384 -> 0 bytes .../d3d/sm30/InGameColormapPalDesat.pso | Bin 500 -> 0 bytes .../shaders/d3d/sm30/InGameColormapPalInv.pso | Bin 428 -> 0 bytes .../d3d/sm30/InGameColormapPalInvDesat.pso | Bin 516 -> 0 bytes .../static/shaders/d3d/sm30/NormalColor.pso | Bin 240 -> 264 bytes .../static/shaders/d3d/sm30/NormalColorD.pso | Bin 0 -> 376 bytes .../shaders/d3d/sm30/NormalColorInv.pso | Bin 300 -> 392 bytes .../shaders/d3d/sm30/NormalColorInvOpaq.pso | Bin 0 -> 428 bytes .../shaders/d3d/sm30/NormalColorOpaq.pso | Bin 0 -> 412 bytes .../shaders/d3d/sm30/NormalColorPal.pso | Bin 380 -> 388 bytes .../shaders/d3d/sm30/NormalColorPalD.pso | Bin 0 -> 500 bytes .../shaders/d3d/sm30/NormalColorPalInv.pso | Bin 424 -> 516 bytes .../d3d/sm30/NormalColorPalInvOpaq.pso | Bin 0 -> 552 bytes .../shaders/d3d/sm30/NormalColorPalOpaq.pso | Bin 0 -> 536 bytes .../static/shaders/d3d/sm30/PalAlphaTex.pso | Bin 0 -> 460 bytes wadsrc/static/shaders/d3d/sm30/PalStencil.pso | Bin 0 -> 428 bytes wadsrc/static/shaders/d3d/sm30/RedToAlpha.pso | Bin 240 -> 0 bytes .../static/shaders/d3d/sm30/RedToAlphaInv.pso | Bin 300 -> 0 bytes .../shaders/d3d/sm30/SpecialColormap.pso | Bin 352 -> 380 bytes .../shaders/d3d/sm30/SpecialColormapPal.pso | Bin 476 -> 504 bytes wadsrc/static/shaders/d3d/sm30/Stencil.pso | Bin 0 -> 304 bytes .../static/shaders/d3d/sm30/VertexColor.pso | Bin 124 -> 128 bytes wadsrc/static/shaders/d3d/sm30/build.bat | 38 +- wadsrc/static/shaders/glsl/main.fp | 17 +- 68 files changed, 314 insertions(+), 271 deletions(-) create mode 100644 wadsrc/static/shaders/d3d/sm20/AlphaTex.pso delete mode 100644 wadsrc/static/shaders/d3d/sm20/InGameColormap.pso delete mode 100644 wadsrc/static/shaders/d3d/sm20/InGameColormapDesat.pso delete mode 100644 wadsrc/static/shaders/d3d/sm20/InGameColormapInv.pso delete mode 100644 wadsrc/static/shaders/d3d/sm20/InGameColormapInvDesat.pso delete mode 100644 wadsrc/static/shaders/d3d/sm20/InGameColormapPal.pso delete mode 100644 wadsrc/static/shaders/d3d/sm20/InGameColormapPalDesat.pso delete mode 100644 wadsrc/static/shaders/d3d/sm20/InGameColormapPalInv.pso delete mode 100644 wadsrc/static/shaders/d3d/sm20/InGameColormapPalInvDesat.pso create mode 100644 wadsrc/static/shaders/d3d/sm20/NormalColorD.pso create mode 100644 wadsrc/static/shaders/d3d/sm20/NormalColorInvOpaq.pso create mode 100644 wadsrc/static/shaders/d3d/sm20/NormalColorOpaq.pso create mode 100644 wadsrc/static/shaders/d3d/sm20/NormalColorPalD.pso create mode 100644 wadsrc/static/shaders/d3d/sm20/NormalColorPalInvOpaq.pso create mode 100644 wadsrc/static/shaders/d3d/sm20/NormalColorPalOpaq.pso create mode 100644 wadsrc/static/shaders/d3d/sm20/PalAlphaTex.pso create mode 100644 wadsrc/static/shaders/d3d/sm20/PalStencil.pso delete mode 100644 wadsrc/static/shaders/d3d/sm20/RedToAlpha.pso delete mode 100644 wadsrc/static/shaders/d3d/sm20/RedToAlphaInv.pso create mode 100644 wadsrc/static/shaders/d3d/sm20/Stencil.pso create mode 100644 wadsrc/static/shaders/d3d/sm30/AlphaTex.pso delete mode 100644 wadsrc/static/shaders/d3d/sm30/InGameColormap.pso delete mode 100644 wadsrc/static/shaders/d3d/sm30/InGameColormapDesat.pso delete mode 100644 wadsrc/static/shaders/d3d/sm30/InGameColormapInv.pso delete mode 100644 wadsrc/static/shaders/d3d/sm30/InGameColormapInvDesat.pso delete mode 100644 wadsrc/static/shaders/d3d/sm30/InGameColormapPal.pso delete mode 100644 wadsrc/static/shaders/d3d/sm30/InGameColormapPalDesat.pso delete mode 100644 wadsrc/static/shaders/d3d/sm30/InGameColormapPalInv.pso delete mode 100644 wadsrc/static/shaders/d3d/sm30/InGameColormapPalInvDesat.pso create mode 100644 wadsrc/static/shaders/d3d/sm30/NormalColorD.pso create mode 100644 wadsrc/static/shaders/d3d/sm30/NormalColorInvOpaq.pso create mode 100644 wadsrc/static/shaders/d3d/sm30/NormalColorOpaq.pso create mode 100644 wadsrc/static/shaders/d3d/sm30/NormalColorPalD.pso create mode 100644 wadsrc/static/shaders/d3d/sm30/NormalColorPalInvOpaq.pso create mode 100644 wadsrc/static/shaders/d3d/sm30/NormalColorPalOpaq.pso create mode 100644 wadsrc/static/shaders/d3d/sm30/PalAlphaTex.pso create mode 100644 wadsrc/static/shaders/d3d/sm30/PalStencil.pso delete mode 100644 wadsrc/static/shaders/d3d/sm30/RedToAlpha.pso delete mode 100644 wadsrc/static/shaders/d3d/sm30/RedToAlphaInv.pso create mode 100644 wadsrc/static/shaders/d3d/sm30/Stencil.pso diff --git a/src/gl/renderer/gl_renderer.cpp b/src/gl/renderer/gl_renderer.cpp index 692dd10ca..82fdec808 100644 --- a/src/gl/renderer/gl_renderer.cpp +++ b/src/gl/renderer/gl_renderer.cpp @@ -486,7 +486,6 @@ public: void FGLRenderer::Draw2D(F2DDrawer *drawer) { - F2DDrawer::EDrawType lasttype = F2DDrawer::DrawTypeTriangles; auto &vertices = drawer->mVertices; auto &indices = drawer->mIndices; auto &commands = drawer->mData; diff --git a/src/v_2ddrawer.cpp b/src/v_2ddrawer.cpp index cbd827f72..1609b784f 100644 --- a/src/v_2ddrawer.cpp +++ b/src/v_2ddrawer.cpp @@ -140,7 +140,19 @@ bool F2DDrawer::SetStyle(FTexture *tex, DrawParms &parms, PalEntry &vertexcolor, parms.fillcolor.r = 255 - parms.fillcolor.r; parms.fillcolor.g = 255 - parms.fillcolor.g; parms.fillcolor.b = 255 - parms.fillcolor.b; + style.Flags &= ~STYLEF_InvertSource; } + if (parms.desaturate > 0) + { + // Desaturation can also be computed here without having to do it in the shader. + auto gray = parms.fillcolor.Luminance(); + auto notgray = 255 - gray; + parms.fillcolor.r = uint8_t((parms.fillcolor.r * notgray + gray * 255) / 255); + parms.fillcolor.g = uint8_t((parms.fillcolor.g * notgray + gray * 255) / 255); + parms.fillcolor.b = uint8_t((parms.fillcolor.b * notgray + gray * 255) / 255); + parms.desaturate = 0; + } + // Set up the color mod to replace the color from the image data. vertexcolor.r = parms.fillcolor.r; vertexcolor.g = parms.fillcolor.g; @@ -236,6 +248,8 @@ void F2DDrawer::SetColorOverlay(PalEntry color, float alpha, PalEntry &vertexcol void F2DDrawer::AddTexture(FTexture *img, DrawParms &parms) { + if (parms.style.BlendOp == STYLEOP_None) return; // not supposed to be drawn. + double xscale = parms.destwidth / parms.texwidth; double yscale = parms.destheight / parms.texheight; double x = parms.x - parms.left * xscale; diff --git a/src/v_video.h b/src/v_video.h index b4a2485c2..cee9d63d5 100644 --- a/src/v_video.h +++ b/src/v_video.h @@ -79,7 +79,7 @@ enum DTA_DestWidth, // width of area to draw to DTA_DestHeight, // height of area to draw to DTA_Alpha, // alpha value for translucency - DTA_FillColor, // color to stencil onto the destination (RGB is the color for truecolor drawers, A is the palette index for paletted drawers) + DTA_FillColor, // color to stencil onto the destination DTA_TranslationIndex, // translation table to recolor the source DTA_AlphaChannel, // bool: the source is an alpha channel; used with DTA_FillColor DTA_Clean, // bool: scale texture size and position by CleanXfac and CleanYfac diff --git a/src/win32/fb_d3d9.cpp b/src/win32/fb_d3d9.cpp index 44ddcc7b3..1f02752eb 100644 --- a/src/win32/fb_d3d9.cpp +++ b/src/win32/fb_d3d9.cpp @@ -161,26 +161,25 @@ const char *const D3DFB::ShaderNames[D3DFB::NUM_SHADERS] = { "NormalColor.pso", "NormalColorPal.pso", + "NormalColorD.pso", + "NormalColorPalD.pso", "NormalColorInv.pso", "NormalColorPalInv.pso", + "NormalColorOpaq.pso", + "NormalColorPalOpaq.pso", + "NormalColorInvOpaq.pso", + "NormalColorPalInvOpaq.pso", - "RedToAlpha.pso", - "RedToAlphaInv.pso", + "AlphaTex.pso", + "PalAlphaTex.pso", + "Stencil.pso", + "PalStencil.pso", "VertexColor.pso", "SpecialColormap.pso", "SpecialColorMapPal.pso", - "InGameColormap.pso", - "InGameColormapDesat.pso", - "InGameColormapInv.pso", - "InGameColormapInvDesat.pso", - "InGameColormapPal.pso", - "InGameColormapPalDesat.pso", - "InGameColormapPalInv.pso", - "InGameColormapPalInvDesat.pso", - "BurnWipe.pso", "GammaCorrection.pso", }; @@ -474,7 +473,7 @@ bool D3DFB::CreateResources() { return false; } - if (!CreateVertexes()) + if (!CreateVertexes(NUM_VERTS, NUM_INDEXES)) { return false; } @@ -610,7 +609,7 @@ bool D3DFB::Reset () } } LOG("Device was reset\n"); - if (!CreateFBTexture() || !CreateVertexes()) + if (!CreateFBTexture() || !CreateVertexes(NUM_VERTS, NUM_INDEXES)) { return false; } @@ -775,19 +774,19 @@ bool D3DFB::CreatePaletteTexture () // //========================================================================== -bool D3DFB::CreateVertexes () +bool D3DFB::CreateVertexes (int numverts, int numindices) { - VertexPos = -1; - IndexPos = -1; - QuadBatchPos = -1; - BatchType = BATCH_None; - if (FAILED(D3DDevice->CreateVertexBuffer(sizeof(FBVERTEX)*NUM_VERTS, + SAFE_RELEASE(VertexBuffer); + SAFE_RELEASE(IndexBuffer); + NumVertices = numverts; + NumIndices = numindices; + if (FAILED(D3DDevice->CreateVertexBuffer(sizeof(FBVERTEX)*numverts, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DFVF_FBVERTEX, D3DPOOL_DEFAULT, &VertexBuffer, NULL))) { return false; } - if (FAILED(D3DDevice->CreateIndexBuffer(sizeof(uint16_t)*NUM_INDEXES, - D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &IndexBuffer, NULL))) + if (FAILED(D3DDevice->CreateIndexBuffer(sizeof(uint16_t)*numindices, + D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DFMT_INDEX32, D3DPOOL_DEFAULT, &IndexBuffer, NULL))) { return false; } @@ -913,7 +912,7 @@ void D3DFB::Update () if (InScene) { DrawRateStuff(); - EndBatch(); // Make sure all batched primitives are drawn. + EndQuadBatch(); // Make sure all batched primitives are drawn. In2D = 0; Flip(); } @@ -1787,76 +1786,190 @@ FNativePalette *D3DFB::CreatePalette(FRemapTable *remap) //========================================================================== // -// D3DFB :: BeginLineBatch +// D3DFB :: Draw2D // //========================================================================== -void D3DFB::BeginLineBatch() +static D3DBLENDOP OpToD3D(int op) { - if (In2D < 2 || !InScene || BatchType == BATCH_Lines) + switch (op) { - return; + // STYLEOP_None can never get here. + default: + return D3DBLENDOP_ADD; + case STYLEOP_Sub: + return D3DBLENDOP_SUBTRACT; + case STYLEOP_RevSub: + return D3DBLENDOP_REVSUBTRACT; } - EndQuadBatch(); // Make sure all quads have been drawn first. - VertexBuffer->Lock(0, 0, (void **)&VertexData, D3DLOCK_DISCARD); - VertexPos = 0; - BatchType = BATCH_Lines; } -//========================================================================== -// -// D3DFB :: EndLineBatch -// -//========================================================================== -void D3DFB::EndLineBatch() +void D3DFB::Draw2D() { - if (In2D < 2 || !InScene || BatchType != BATCH_Lines) + auto &vertices = m2DDrawer.mVertices; + auto &indices = m2DDrawer.mIndices; + auto &commands = m2DDrawer.mData; + + auto vc = vertices.Size(); + auto ic = indices.Size(); + if (vc > NumVertices || ic > NumIndices) { - return; + // We got more vertices than the current buffer can take so resize it. + if (!CreateVertexes(MAX(vc, NumVertices), MAX(ic, NumIndices))) + { + I_FatalError("Unable to resize vertex buffer"); + } + } + IndexBuffer->Lock(0, 0, (void **)&IndexData, D3DLOCK_DISCARD); + memcpy(IndexData, &indices[0], sizeof(*IndexData) * ic); + IndexBuffer->Unlock(); + VertexBuffer->Lock(0, 0, (void **)&VertexData, D3DLOCK_DISCARD); + auto yoffs = GatheringWipeScreen ? 0.5f : 0.5f - LBOffset; + + for (auto &vt : vertices) + { + VertexData->x = vt.x; + VertexData->y = vt.y + yoffs; + VertexData->z = vt.z; + VertexData->rhw = 1; + VertexData->color0 = vt.color0; + VertexData->color1 = 0; + VertexData->tu = vt.u; + VertexData->tv = vt.v; } VertexBuffer->Unlock(); - if (VertexPos > 0) + D3DDevice->SetStreamSource(0, VertexBuffer, 0, sizeof(FBVERTEX)); + D3DDevice->SetIndices(IndexBuffer); + + D3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER); + D3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER); + bool uv_wrapped = false; + bool scissoring = false; + EnableAlphaTest(true); + + for (auto &cmd : commands) { - SetPixelShader(Shaders[SHADER_VertexColor]); - SetAlphaBlend(D3DBLENDOP_ADD, D3DBLEND_SRCALPHA, D3DBLEND_INVSRCALPHA); - D3DDevice->SetStreamSource(0, VertexBuffer, 0, sizeof(FBVERTEX)); - D3DDevice->DrawPrimitive(D3DPT_LINELIST, 0, VertexPos / 2); + //Set blending mode + SetAlphaBlend(OpToD3D(cmd.mRenderStyle.BlendOp), GetStyleAlpha(cmd.mRenderStyle.SrcAlpha), GetStyleAlpha(cmd.mRenderStyle.DestAlpha)); + int index = -1; + + if (cmd.mTexture == nullptr) + { + index = SHADER_VertexColor; + } + else + { + // set texture wrapping + bool uv_should_wrap = !!(cmd.mFlags & F2DDrawer::DTF_Wrap); + if (uv_wrapped != uv_should_wrap) + { + DWORD mode = uv_should_wrap ? D3DTADDRESS_WRAP : D3DTADDRESS_BORDER; + uv_wrapped = uv_should_wrap; + D3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, mode); + D3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, mode); + } + + auto textype = cmd.mTexture->GetFormat(); // This never returns TEX_Gray. + if (cmd.mTranslation) textype = TEX_Pal; // Translation requires a paletted texture, regardless of the source format. + + if (cmd.mFlags & F2DDrawer::DTF_SpecialColormap) + { + index = textype == TEX_Pal ? SHADER_SpecialColormapPal : SHADER_SpecialColormap; + SetConstant(PSCONST_Color1, cmd.mColor1.r / 510.f, cmd.mColor1.g / 510.f, cmd.mColor1.b / 510.f, 0); + SetConstant(PSCONST_Color2, cmd.mColor1.r / 510.f, cmd.mColor1.g / 510.f, cmd.mColor1.b / 510.f, 0); + } + else + { + SetConstant(PSCONST_Desaturation, cmd.mDesaturate / 255.f, (255 - cmd.mDesaturate) / 255.f, 0, 0); + SetConstant(PSCONST_Color1, cmd.mColor1.r / 255.f, cmd.mColor1.g / 255.f, cmd.mColor1.b / 255.f, 0); + switch (cmd.mDrawMode) + { + default: + case F2DDrawer::DTM_Normal: + if (cmd.mDesaturate) index = textype == TEX_Pal ? SHADER_NormalColorPalD : SHADER_NormalColorD; + else index = textype == TEX_Pal ? SHADER_NormalColorPal : SHADER_NormalColor; + break; + + case F2DDrawer::DTM_Invert: + index = textype == TEX_Pal ? SHADER_NormalColorPalInv : SHADER_NormalColorInv; + break; + + case F2DDrawer::DTM_InvertOpaque: + index = textype == TEX_Pal ? SHADER_NormalColorPalInvOpaq : SHADER_NormalColorInvOpaq; + break; + + case F2DDrawer::DTM_AlphaTexture: + index = textype == TEX_Pal ? SHADER_PalAlphaTex : SHADER_AlphaTex; + break; + + case F2DDrawer::DTM_Opaque: + index = textype == TEX_Pal ? SHADER_NormalColorPalOpaq : SHADER_NormalColorOpaq; + break; + + case F2DDrawer::DTM_Stencil: + index = textype == TEX_Pal ? SHADER_PalStencil : SHADER_Stencil; + break; + + } + } + + auto tex = cmd.mTexture; + D3DTex *d3dtex = static_cast(tex->GetNative(textype, uv_should_wrap)); + if (d3dtex == nullptr) continue; + SetTexture(0, d3dtex->Tex); + + if (textype == TEX_Pal) + { + if (!cmd.mTranslation) + { + SetPaletteTexture(PaletteTexture, 256, BorderColor); + } + else + { + auto ptex = static_cast(cmd.mTranslation->GetNative()); + if (ptex != nullptr) + { + SetPaletteTexture(ptex->Tex, ptex->RoundedPaletteSize, ptex->BorderColor); + } + } + } + } + if (index == -1) continue; + SetPixelShader(Shaders[index]); + + if (cmd.mFlags & F2DDrawer::DTF_Scissor) + { + scissoring = true; + RECT scissor = { cmd.mScissor[0], cmd.mScissor[1] + LBOffsetI, cmd.mScissor[2], cmd.mScissor[3] + LBOffsetI }; + D3DDevice->SetScissorRect(&scissor); + D3DDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, TRUE); + } + else if (scissoring) D3DDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, false); + + switch (cmd.mType) + { + case F2DDrawer::DrawTypeTriangles: + D3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, cmd.mVertIndex, cmd.mVertCount); + break; + + case F2DDrawer::DrawTypeLines: + D3DDevice->DrawPrimitive(D3DPT_LINELIST, cmd.mVertIndex, cmd.mVertCount); + break; + + case F2DDrawer::DrawTypePoints: + D3DDevice->DrawPrimitive(D3DPT_POINTLIST, cmd.mVertIndex, cmd.mVertCount); + break; + + } + } + if (uv_wrapped) + { + D3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER); + D3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER); } - VertexPos = -1; - BatchType = BATCH_None; } - -//========================================================================== -// -// D3DFB :: DrawPixel -// -//========================================================================== - -#if 0 -void D3DFB::DrawPixel(int x, int y, int palcolor, uint32_t color) -{ - if (In2D < 2) - { - Super::DrawPixel(x, y, palcolor, color); - return; - } - if (!InScene) - { - return; - } - FBVERTEX pt = - { - float(x), float(y), 0, 1, color - }; - EndBatch(); // Draw out any batched operations. - SetPixelShader(Shaders[SHADER_VertexColor]); - SetAlphaBlend(D3DBLENDOP_ADD, D3DBLEND_SRCALPHA, D3DBLEND_INVSRCALPHA); - D3DDevice->DrawPrimitiveUP(D3DPT_POINTLIST, 1, &pt, sizeof(FBVERTEX)); -} -#endif - //========================================================================== // // D3DFB :: CheckQuadBatch @@ -1867,11 +1980,7 @@ void D3DFB::DrawPixel(int x, int y, int palcolor, uint32_t color) void D3DFB::CheckQuadBatch(int numtris, int numverts) { - if (BatchType == BATCH_Lines) - { - EndLineBatch(); - } - else if (QuadBatchPos == MAX_QUAD_BATCH || + if (QuadBatchPos == MAX_QUAD_BATCH || VertexPos + numverts > NUM_VERTS || IndexPos + numtris * 3 > NUM_INDEXES) { @@ -1897,7 +2006,6 @@ void D3DFB::BeginQuadBatch() { return; } - EndLineBatch(); // Make sure all lines have been drawn first. VertexBuffer->Lock(0, 0, (void **)&VertexData, D3DLOCK_DISCARD); IndexBuffer->Lock(0, 0, (void **)&IndexData, D3DLOCK_DISCARD); VertexPos = 0; @@ -1911,6 +2019,7 @@ void D3DFB::BeginQuadBatch() // D3DFB :: EndQuadBatch // // Draws all the quads that have been batched up. +// This is still needed by the wiper and has been stripped off everything unneeded. // //========================================================================== @@ -1932,8 +2041,6 @@ void D3DFB::EndQuadBatch() } D3DDevice->SetStreamSource(0, VertexBuffer, 0, sizeof(FBVERTEX)); D3DDevice->SetIndices(IndexBuffer); - bool uv_wrapped = false; - bool uv_should_wrap; int indexpos, vertpos; indexpos = vertpos = 0; @@ -1959,81 +2066,17 @@ void D3DFB::EndQuadBatch() { break; } - if (quad->ShaderNum == BQS_InGameColormap && (quad->Flags & BQF_Desaturated) && quad->Desat != q2->Desat) - { - break; - } indexpos += q2->NumTris * 3; vertpos += q2->NumVerts; } - // Set the palette (if one) - if ((quad->Flags & BQF_Paletted) == BQF_GamePalette) - { - SetPaletteTexture(PaletteTexture, 256, BorderColor); - } - else if ((quad->Flags & BQF_Paletted) == BQF_CustomPalette) - { - assert(quad->Palette != NULL); - SetPaletteTexture(quad->Palette->Tex, quad->Palette->RoundedPaletteSize, quad->Palette->BorderColor); - } - // Set the alpha blending - SetAlphaBlend(D3DBLENDOP(quad->BlendOp), D3DBLEND(quad->SrcBlend), D3DBLEND(quad->DestBlend)); + SetAlphaBlend(D3DBLENDOP_ADD, D3DBLEND_ONE, D3DBLEND_ZERO); // Set the alpha test - EnableAlphaTest(!(quad->Flags & BQF_DisableAlphaTest)); + EnableAlphaTest(false); - // Set the pixel shader - if (quad->ShaderNum == BQS_PalTex) - { - SetPixelShader(Shaders[(quad->Flags & BQF_InvertSource) ? - SHADER_NormalColorPalInv : SHADER_NormalColorPal]); - } - else if (quad->ShaderNum == BQS_Plain) - { - SetPixelShader(Shaders[(quad->Flags & BQF_InvertSource) ? - SHADER_NormalColorInv : SHADER_NormalColor]); - } - else if (quad->ShaderNum == BQS_RedToAlpha) - { - SetPixelShader(Shaders[(quad->Flags & BQF_InvertSource) ? - SHADER_RedToAlphaInv : SHADER_RedToAlpha]); - } - else if (quad->ShaderNum == BQS_ColorOnly) - { - SetPixelShader(Shaders[SHADER_VertexColor]); - } - else if (quad->ShaderNum == BQS_SpecialColormap) - { - int select; - - select = !!(quad->Flags & BQF_Paletted); - SetPixelShader(Shaders[SHADER_SpecialColormap + select]); - } - else if (quad->ShaderNum == BQS_InGameColormap) - { - int select; - - select = !!(quad->Flags & BQF_Desaturated); - select |= !!(quad->Flags & BQF_InvertSource) << 1; - select |= !!(quad->Flags & BQF_Paletted) << 2; - if (quad->Flags & BQF_Desaturated) - { - SetConstant(PSCONST_Desaturation, quad->Desat / 255.f, (255 - quad->Desat) / 255.f, 0, 0); - } - SetPixelShader(Shaders[SHADER_InGameColormap + select]); - } - - // Set the texture clamp addressing mode - uv_should_wrap = !!(quad->Flags & BQF_WrapUV); - if (uv_wrapped != uv_should_wrap) - { - DWORD mode = uv_should_wrap ? D3DTADDRESS_WRAP : D3DTADDRESS_BORDER; - uv_wrapped = uv_should_wrap; - D3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, mode); - D3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, mode); - } + SetPixelShader(Shaders[SHADER_NormalColor]); // Set the texture if (quad->Texture != NULL) @@ -2050,11 +2093,6 @@ void D3DFB::EndQuadBatch() /*4 * i, 4 * (j - i), 6 * i, 2 * (j - i)*/); i = j; } - if (uv_wrapped) - { - D3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER); - D3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER); - } QuadBatchPos = -1; VertexPos = -1; IndexPos = -1; @@ -2068,18 +2106,6 @@ void D3DFB::EndQuadBatch() // //========================================================================== -void D3DFB::EndBatch() -{ - if (BatchType == BATCH_Quads) - { - EndQuadBatch(); - } - else if (BatchType == BATCH_Lines) - { - EndLineBatch(); - } -} - D3DBLEND D3DFB::GetStyleAlpha(int type) { switch (type) diff --git a/src/win32/fb_d3d9_wipe.cpp b/src/win32/fb_d3d9_wipe.cpp index 1712011a1..e7f1f1307 100644 --- a/src/win32/fb_d3d9_wipe.cpp +++ b/src/win32/fb_d3d9_wipe.cpp @@ -208,7 +208,7 @@ void D3DFB::WipeEndScreen() Begin2D(true); } - EndBatch(); // Make sure all batched primitives have been drawn. + EndQuadBatch(); // Make sure all batched primitives have been drawn. // Don't do anything if there is no ending point. if (OldRenderTarget == NULL) diff --git a/src/win32/win32swiface.h b/src/win32/win32swiface.h index 428aafae4..099441736 100644 --- a/src/win32/win32swiface.h +++ b/src/win32/win32swiface.h @@ -92,33 +92,36 @@ private: { PSCONST_Desaturation = 1, PSCONST_PaletteMod = 2, + PSCONST_Color1 = 3, + PSCONST_Color2 = 4, + PSCONST_BUFFERED_MAX, PSCONST_Weights = 6, PSCONST_Gamma = 7, + }; enum { SHADER_NormalColor, SHADER_NormalColorPal, + SHADER_NormalColorD, + SHADER_NormalColorPalD, SHADER_NormalColorInv, SHADER_NormalColorPalInv, + SHADER_NormalColorOpaq, + SHADER_NormalColorPalOpaq, + SHADER_NormalColorInvOpaq, + SHADER_NormalColorPalInvOpaq, - SHADER_RedToAlpha, - SHADER_RedToAlphaInv, + SHADER_AlphaTex, + SHADER_PalAlphaTex, + SHADER_Stencil, + SHADER_PalStencil, SHADER_VertexColor, SHADER_SpecialColormap, SHADER_SpecialColormapPal, - SHADER_InGameColormap, - SHADER_InGameColormapDesat, - SHADER_InGameColormapInv, - SHADER_InGameColormapInvDesat, - SHADER_InGameColormapPal, - SHADER_InGameColormapPalDesat, - SHADER_InGameColormapPalInv, - SHADER_InGameColormapPalInvDesat, - SHADER_BurnWipe, SHADER_GammaCorrection, @@ -134,7 +137,7 @@ private: bool CreateFBTexture(); bool CreatePaletteTexture(); bool CreateGammaTexture(); - bool CreateVertexes(); + bool CreateVertexes(int numv, int numi); void UploadPalette(); void UpdateGammaTexture(float igamma); void FillPresentParameters (D3DPRESENT_PARAMETERS *pp, bool fullscreen, bool vsync); @@ -149,14 +152,11 @@ private: void Draw3DPart(bool copy3d); static D3DBLEND GetStyleAlpha(int type); void DoWindowedGamma(); - void AddColorOnlyQuad(int left, int top, int width, int height, D3DCOLOR color); void CheckQuadBatch(int numtris=2, int numverts=4); void BeginQuadBatch(); void EndQuadBatch(); - void BeginLineBatch(); - void EndLineBatch(); - void EndBatch(); void CopyNextFrontBuffer(); + void Draw2D() override; D3DCAPS9 DeviceCaps; @@ -173,7 +173,7 @@ private: D3DBLENDOP AlphaBlendOp; D3DBLEND AlphaSrcBlend; D3DBLEND AlphaDestBlend; - float Constant[3][4]; + float Constant[PSCONST_BUFFERED_MAX][4]; D3DCOLOR CurBorderColor; IDirect3DPixelShader9 *CurPixelShader; IDirect3DTexture9 *Texture[5]; @@ -222,12 +222,17 @@ private: FBVERTEX *VertexData; IDirect3DIndexBuffer9 *IndexBuffer; uint16_t *IndexData; + + // This stuff is still needed for the Wiper (which will be refactored later) BufferedTris *QuadExtra; int VertexPos; int IndexPos; int QuadBatchPos; enum { BATCH_None, BATCH_Quads, BATCH_Lines } BatchType; + unsigned int NumVertices = 0; + unsigned int NumIndices = 0; + IDirect3DPixelShader9 *Shaders[NUM_SHADERS]; IDirect3DPixelShader9 *GammaShader; diff --git a/wadsrc/static/shaders/d3d/shaders.ps b/wadsrc/static/shaders/d3d/shaders.ps index 5d53f9bf8..f94082d80 100644 --- a/wadsrc/static/shaders/d3d/shaders.ps +++ b/wadsrc/static/shaders/d3d/shaders.ps @@ -3,6 +3,8 @@ sampler1D Palette : register(s1); float4 Desaturation : register(c1); // { Desat, 1 - Desat } float4 PaletteMod : register(c2); +float4 Color1 : register(c3); +float4 Color2 : register(c4); float4 Weights : register(c6); // RGB->Gray weighting { 77/256.0, 143/256.0, 37/256.0, 1 } float4 Gamma : register(c7); @@ -17,14 +19,6 @@ float4 TextureLookup(float2 tex_coord) #endif } -float4 Invert(float4 rgb) -{ -#if INVERT - rgb.rgb = Weights.www - rgb.xyz; -#endif - return rgb; -} - float Grayscale(float4 rgb) { return dot(rgb.rgb, Weights.rgb); @@ -32,24 +26,35 @@ float Grayscale(float4 rgb) float4 SampleTexture(float2 tex_coord) { - return Invert(TextureLookup(tex_coord)); + float4 texel = TextureLookup(tex_coord); +#if INVERT + texel.rgb = Weights.www - texel.xyz; +#endif +#if OPAQUE + texel.a = 1.0; +#endif +#if STENCIL + texel.rgb = Weights.www; +#endif +#if ALPHATEX + texel.a *= Grayscale(texel); + texel.rgb = Weights.www; +#endif +#if DESAT + float3 intensity; + intensity.rgb = Grayscale(texel) * Desaturation.x; + texel.rgb = intensity.rgb + texel.rgb * Desaturation.y; +#endif + return texel; } // Normal color calculation for most drawing modes. -float4 NormalColor(float2 tex_coord : TEXCOORD0, float4 VertexColor : COLOR0, float4 Overlay : COLOR1) : COLOR +float4 NormalColor(float2 tex_coord : TEXCOORD0, float4 VertexColor : COLOR0) : COLOR { - return Overlay + SampleTexture(tex_coord) * VertexColor; + return Color1 + SampleTexture(tex_coord) * VertexColor; } -// Copy the red channel to the alpha channel. Pays no attention to palettes and only works with grayscale textures - -float4 RedToAlpha(float2 tex_coord : TEXCOORD0, float4 VertexColor : COLOR0, float4 Overlay : COLOR1) : COLOR -{ - float4 color = Invert(tex2D(Image, tex_coord)); - color.a *= color.r; - return Overlay + color * VertexColor; -} // Just return the value of c0. @@ -60,41 +65,16 @@ float4 VertexColor(float4 color : COLOR0) : COLOR // Emulate one of the special colormaps. (Invulnerability, gold, etc.) -float4 SpecialColormap(float2 tex_coord : TEXCOORD0, float4 start : COLOR0, float4 end : COLOR1) : COLOR +float4 SpecialColormap(float2 tex_coord : TEXCOORD0) : COLOR { float4 color = SampleTexture(tex_coord); - float4 range = end - start; + float4 range = Color2 - Color1; // We can't store values greater than 1.0 in a color register, so we multiply // the final result by 2 and expect the caller to divide the start and end by 2. - color.rgb = 2 * (start + Grayscale(color) * range).rgb; - // Duplicate alpha semantics of NormalColor. - color.a = start.a + color.a * end.a; + color.rgb = 2 * (Color1 + Grayscale(color) * range).rgb; return color; } -// In-game colormap effect: fade to a particular color and multiply by another, with -// optional desaturation of the original color. Desaturation is stored in c1. -// Fade level is packed int fade.a. Fade.rgb has been premultiplied by alpha. -// Overall alpha is in color.a. -float4 InGameColormap(float2 tex_coord : TEXCOORD0, float4 color : COLOR0, float4 fade : COLOR1) : COLOR -{ - float4 rgb = SampleTexture(tex_coord); - - // Desaturate -#if DESAT - float3 intensity; - intensity.rgb = Grayscale(rgb) * Desaturation.x; - rgb.rgb = intensity.rgb + rgb.rgb * Desaturation.y; -#endif - - // Shade and Alpha - rgb = rgb * color; - - // Fade - rgb.rgb = rgb.rgb * fade.aaa + fade.rgb; - - return rgb; -} // Windowed gamma correction. diff --git a/wadsrc/static/shaders/d3d/sm20/AlphaTex.pso b/wadsrc/static/shaders/d3d/sm20/AlphaTex.pso new file mode 100644 index 0000000000000000000000000000000000000000..2dcc640bc6682da6e9e63425ff6b0b5717721ffb GIT binary patch literal 364 zcmZQz`v3pme-j4h5Jx8&1_p-d3=9k)F=hq^1`wa2k%3_X0|P?@NSJ|xfssLpApxX@ zfq|ibfq?;}j*)?hp#mz_0anMxz{ns4SLd9clV4=Wu$qy9nSqgkg@F;O)-yLTJ(Xeg zY8D0_21YQ1NQ9?mre~BCGZYlZ8^s$i_+};-KPm8SsED_=ouN9TUauzUM|+et delta 31 ncmX@Zbb^VUf$9JMfB$tRvM=Q^GS{;-HPSOSFfwA8xMu@ diff --git a/wadsrc/static/shaders/d3d/sm20/InGameColormap.pso b/wadsrc/static/shaders/d3d/sm20/InGameColormap.pso deleted file mode 100644 index 7ef9f5322c6df11f6e678294e0b38f34566cdea9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmZQz`v3pme?3us8W7WcWXUk>SY%R)iXm_yk6f9UNdi4gdc$FaQ7} CWHKxO diff --git a/wadsrc/static/shaders/d3d/sm20/InGameColormapDesat.pso b/wadsrc/static/shaders/d3d/sm20/InGameColormapDesat.pso deleted file mode 100644 index 2a87e6e96ba1c0e80cb4fca685f3810370589950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmZQz`v3pme^UnM5Jx8&1_p-t3=9k)F=hq^1`wa2k%3_b0|P?@NSJ|eY-4%nXbSEDVfL zJ)XIV>8T8>SF+YS0~^DW1*~8`JDAVN5W0Ycfq{jQfxUr|;eP`o s1H%GFh9?amF$S>M6Oi}>MusO7K>8RMz~+MVPGAJNivz;{|DS;Y01OLBvj6}9 diff --git a/wadsrc/static/shaders/d3d/sm20/InGameColormapInv.pso b/wadsrc/static/shaders/d3d/sm20/InGameColormapInv.pso deleted file mode 100644 index 98ff0cc387e18e6056ad1f138c3d2a453b5c2e45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmZQz`v3pme;o$r5Jx8&1_p*|1_lO@7!v~n1BlPi$iPs-z`)?bz`(%Fz`(%Bz{KDK zQp3Q&5Cc-mz{bGHAjOaZ74ytZOiyK4y_$uAhk+3cArj%KnduoN#SDxL%nXbSEDVeg zVTOX@c%yg&2H(u&qWt3gv=Rl4AWa1ipI{$_;EcqS)FK7v{M>@foYW!(OFbiVJxfy~ zJ!1nSBL;Z}29OgQ7#Ns0AlUp9U~EPPIC}yE2mb;mu=DvF7#N;xVBmPNfQf;DnUR4V x#BXF{_`iUKfq{jAfxUr|;YkA{!~Y443{NJoBJ_aNO<)As$pJQ_;s1XI1_1g-Iv4-| diff --git a/wadsrc/static/shaders/d3d/sm20/InGameColormapInvDesat.pso b/wadsrc/static/shaders/d3d/sm20/InGameColormapInvDesat.pso deleted file mode 100644 index 3605fb6ba5d21add10d9310897012fb097a4863b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmZQz`v3pme^UnM5Jx8&1_p-t3=9k)F=hq^1`wa2k%3_b0|P?@NSJ|eY-4%nXbSEDVfL zJ)XIV>8T8>SF0Tt^2X=h+!U}WH8m;x2^%uP&BWmvtMg@K0wq?!>b9*~%mT2hkA zz{0?dP24v>g<&-#12Y370}BI8PeF0KQM>_zZ)S2)esO+UiGoIurhFYLSAao{_nprKypgv4N2hgFFKR69WT70|Nu|1_Yab0*uYb0B28N;NV{X z6`#P!!N0%>>~;PI28Jga7&x9RU}0cjVPIfx0GY?cz_5UcArx6n10!4wJ4jChBg6j* aj0{gEup-O>iBDhzxrqa8Zo~io3=9CxQ$)f5 diff --git a/wadsrc/static/shaders/d3d/sm20/InGameColormapPalDesat.pso b/wadsrc/static/shaders/d3d/sm20/InGameColormapPalDesat.pso deleted file mode 100644 index 3f08538b121bf172e05d21a95d3a47f1ced9c09c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmZQz`v3pme-8%d5Jx8&1_p*#3=9k)F;)f!1`wa2k%8ec0|P??NSJ|42D zqQsKS{5*!$t5-8JFf%YRurM$}&GF1lOiyK4y_$uA2ka7@foYW!( zOFbiVJxfy~J!1nSBZk%T3=B+=U|`;WVDnFau^AcQ>7??pp+Q7uXuz-mn6j@CJBgc~k91IN1j0_wgJq>IOPZqF(`Rrgm zBSR?I3`Pd_21bVe4U7y73m6%mG(gM+i9G>{PheztG6AHIfdOncNbdwjkUuye{Qv(M F7yy46U9bQE diff --git a/wadsrc/static/shaders/d3d/sm20/InGameColormapPalInv.pso b/wadsrc/static/shaders/d3d/sm20/InGameColormapPalInv.pso deleted file mode 100644 index 14c602bc42b28ec6928b8e2a59eccfe4da27d006..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440 zcmZQz`v3pme|rY!5Jx8&1_p-X3=9k)F%|{}1`wa2k%8d=0|P@20|Nsy0|Nsi0~13D zNDTu6Lkn1pk%5tcjiCoBHV34gfr){Ufs0`URBQ)WjE#YjK?*MBnVXoN%CLGh3j+@W z$OJ~H+JMBI)RK}^1{MZxY~sH8DGaL_8JHOu8CV!#dcspP(=$qn848Nyjp7X$d^3}a z@{9A+N)$ALG!;C2f_)T%GZIr$ixiyma|<$aQi~KU^^DB*EKQB{j17#87~~lkm>3us z8Wh7J diff --git a/wadsrc/static/shaders/d3d/sm20/InGameColormapPalInvDesat.pso b/wadsrc/static/shaders/d3d/sm20/InGameColormapPalInvDesat.pso deleted file mode 100644 index ac3e5dc67bee455d85ea098513b323ff0ceddc5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmZQz`v3pme-8%d5Jx8&1_p*#3=9k)F;)f!1`wa2k%8ec0|P??NSJ|42D zqQsKS{5*!$t5-8JFf%YRurM$}&GF1lOiyK4y_$uA2ka7@foYW!( zOFbiVJxfy~J!1nSBZk%T3=B+=U|`;WVDnFau^AcQ>7??pp+Q7uXuz-mn6j@CJBgc~kObiUnj124`J&kM({}*t8`5X<5 z3{M)^7@jO(1@qa#d`5;)u$dtBj12!97#SEAfYd?kfvNdFfsx_K1du)k2C!Q|W=~)Q N`HKU>|NozX0RVBwVMzc0 diff --git a/wadsrc/static/shaders/d3d/sm20/NormalColor.pso b/wadsrc/static/shaders/d3d/sm20/NormalColor.pso index 530002972c6a15cb02bcf25e0886583b8a3d8e1b..0797f9af163079126368b56e4e990686331fb6bb 100644 GIT binary patch delta 165 zcmeyvIE5*Zf$9JMfB$tEoI@O)WEdD2su>sFuI6(XcHijn)SiyXD zFrSejbO8$k0}BHKdjliG{{}_|h6RiaPZ}U%U^77KCU7u3S-=Rgn*$>D|33o*0O7Sr A!vFvP literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm20/NormalColorInv.pso b/wadsrc/static/shaders/d3d/sm20/NormalColorInv.pso index da470159a030befc9a068940599a5d98369b9d30..b77b0e33f6b4e13885354b33e0bce7be00e61f6f 100644 GIT binary patch delta 320 zcmdnNG=;gIf$9JMfB$V5oI@O)WEdD2wlgp=fW%lB7#Ki&hDHX44GatnIUr#M4hBXB zC594^8U_Z27O)s210w?)Tx=o(0|PSy0|O%i6T=Lsx)oq`Yz&MHQgC(7`8oMTh72~V z85x)v7#Ua?7@>+?Qi~HyN{bRpGV}8oJaZG%QyEsXFz_&dtbwTsPt8ovC@G#;uPb0| zpl4}hV4!DYU~XZ_uzK~x9r6<&OQtX~us1L;JZWTO_`iUIfq|Kkfun(u;YkAsCt i_!}4*o=jk2U|?Zj;0MWp_#k=$NS=WMBKH430|Nly=_joK diff --git a/wadsrc/static/shaders/d3d/sm20/NormalColorInvOpaq.pso b/wadsrc/static/shaders/d3d/sm20/NormalColorInvOpaq.pso new file mode 100644 index 0000000000000000000000000000000000000000..34ec0699570d5ebbcf82dd2e3932caea7944fe60 GIT binary patch literal 440 zcmZQz`v3pme;Wqp5Jx8&1_p-h3=9k)F%|{}1`wa2k%3_Y0|P@2NSJ|xfssLpp#-Fc zfq|g~EXK&d$iM~{o5;Yxz|6qFz{tSFFaxS?1y~&$10#bJT%B`%PJWRg!)itbW(GzE z76wMBT9?$~#FEmY#FEVXJONm3=AMXLn8yjeg+1H9FQ;r2LmI6 z5<>|{4Fdy13j+fKGXnzyBLfpd4^(UpSd5W@k%5h22~=zgST7R;BLf#)uXBD*evu&q z*J?%vW(GzE76!(Nu}%{==m;7c=vf*W80Z-pm|IvftX{o(;tTo7!i=seEDQ`R3=I4Y a3=B^|cmfB*lLd?n3``6h5V8ON85jUs(Iu?_ delta 194 zcmbQh+`$~n!1VwBzyB5t&LNIYG7Jn1s~H#=Kw``c3=AMXLn8yj5(Wl_2nGfQkQgHa z6GH+>4Fdy10a%QYfsuiYp#mz_0n*OE#K6eF#V}=Jr<1^HMh0dEMg|rJMu>`ur*wIY z%=Iiyjr5ESjEop2b1=#?H84(=W%M^-WME)oWZ-XLWOy=xg@J*Efq}n)f#C^=527c4 O9>@rn)Z)aF(xSwY%=|nC&)mfHREE_o3_J`VTVQGe z5_3{ZN>UkE7`U;C`{t)Ggr{bvXOt8(6cooB#TzjAW+oTq7w4yyC};#}DtPz=`zQow zB&MVmDLCin7G&n67AaWj85`(X8W|Yq85x*cSTd|$y;`1ufr){Ep@D&cc>{vYKLN^~ zz`()30LEtI;9uYb4kG>r28Jga7&x9RU}0cjVPIfx0GYwWz_5UcArx6n10%5CC|Nm?Z3=AMXLn8yjZw3a2DIj464hBXB zC5AZ+5U>U;#>l|Pzy=rF$-uzC%)r3F$iT#K0HTcH0$2>9?gmus1z0bW4+A3u7hLma zupk=)BZCxN%sD?NzsQhbH6sHv10w?q1IT?KGh9-O6H7{q5=%1k^B6pH6Vp=}Cf1uw zJYu3|Y@lapWMH6YWMFP#$*_9$YIz0*CI$wE1_lP^4RH2kRmR{HMh5l<28Jh%Yz+Sw za4;}1Gcs^AFfu%8U}Jc)fECPV2lE*jLKmg%GcYo+Ffc;YPyA=9YhAkV9>@rn)Z)aF(xSwY%=|nC&)mfHREE_o3_J`VTVQGe z5_3{ZN>UkE7`U;C`{t)Ggr{bvXOt8(6cooB#TzjAW+oTq7w4yyC};#}DtPz=`zQow zB&MVmDLCin7G&n67AaWj85`(X8W|Yq85x*cSTd|$y*iMAft7)Qe*ptSgFVP?Ff7l& zz{J47(7?dJyaB=Hp8#b~VBp|i0An+9@Go!z2OWO{1H+RI3>;4uurM&NFfcGTfXrZG zU|7J!5Q?m(fsy0M0w%B?c95P%HirKTIKX@k5Wj(q;mHD4Fdr=6z{n5^H50`D-@wSg nuz-Q#35aH5U;yc1fXaj205W3&2g8#Ej39q-K*aw4XJ7yT4$ord literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm20/NormalColorPalOpaq.pso b/wadsrc/static/shaders/d3d/sm20/NormalColorPalOpaq.pso new file mode 100644 index 0000000000000000000000000000000000000000..1e401a29655fcb3d3c5b07f85e8ad96cccd08038 GIT binary patch literal 548 zcmZQz`v3pme}4w&5Jx8&1_lNuMiBA;KN|xB1BlPi$iVQMfq`KPNSJ|xfssLpVGaWX ztO1KLGB7f*!NqnmFfcGPFfcGOFfkl}C}X$)7K5m}0Tp`z*2~1e$iM~H`xz|8#=yuR z1s8M9&&e+`WLV9}z|6qNz`_7>9>@rn)Z)aF(xSwY%=|nC&)mfHREE_o3_J`VTVQGe z5_3{ZN>UkE7`U;C`{t)Ggr{bvXOt8(6cooB#TzjAW+oTq7w4yyC};#}DtPz=`zQow zB&MVmDLCin7G&n67AaWj85`(X8W|Yq85x*cSTd|$y*iMAft7)Qe*ptSgFVP?Ff7l& zz{J47(7?dJyaB=Hp8#b~VBp|i0An+9@Go!z2OWO{1H+RI3>;4uurM&NFfcGTfXrZG zU|7J!5Q?m(fsy0M0uHbq4v?M(Hijn)SiyXDFrSej6lw;D|G$Befnfmy!xIqA#J~X3 c!vK{B+X>P$frH`60!EO#IUr*H|1&TE0PP-MPyhe` literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm20/PalAlphaTex.pso b/wadsrc/static/shaders/d3d/sm20/PalAlphaTex.pso new file mode 100644 index 0000000000000000000000000000000000000000..bde6402dcb1a9fa1759ac15461a91cf4104f4963 GIT binary patch literal 488 zcmZQz`v3pme|HAw5Jx8&1_p*l3=9k)F;)f!1`wa2k%8eh0|P??NSJ|xfssLpp#!9b zfq`KL0|Nsy0|Nsi0~5mnsMrRu7$XBC0~^B*sMraxUM2=c1}?bX%V04!21W)cxR`T( zPJWRg!)itbW(GzE76wMBe$U**^i+n`t63O$7(gb&!~+s@QcFrw8CV#&v5EWUr!a)4 zW~OJ96f+bQ#~Z~PF!*LB7v&e{r literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm20/PalStencil.pso b/wadsrc/static/shaders/d3d/sm20/PalStencil.pso new file mode 100644 index 0000000000000000000000000000000000000000..789ba95f155d38898de05e0a166f500c622c91ff GIT binary patch literal 456 zcmZQz`v3pme|HAw5Jx8&1_p*l3=9k)F;)f!1`wa2k%8eh0|P??NSJ|xfssLpp#!9b zfq`KL0|Nsy0|Nsi0~5mnsMrRu7$XBC0~^B*sMraxUM2=c1}?bX%V04!21W)cxR`T( zPJWRg!)itbW(GzE76wMBe$U**^i+n`t63O$7(gb&!~+s@QcFrw8CV#&v5EWUr!a)4 zW~OJ96f+bQ#~Z~PF!*LB7v&e{r3us8W@foYW!(OFbiVJxfy~ zJ!1nSBL;Z}29OgQ7#Ns0AlUp9U~EPPIC}yE2mb;mu=DvF7#N;xVBmPNfQf;DnUR4V y#BXF{_z&fCG%zqQfccDI^Z6SX8JOpt{Se^rHUc>+Y3=9BZHakB6 diff --git a/wadsrc/static/shaders/d3d/sm20/SpecialColormap.pso b/wadsrc/static/shaders/d3d/sm20/SpecialColormap.pso index 24ebb375ae3e9bb767c04aa0ef8e4269faadeb0f..ffcc858bf1523f379e82e938b6d5b4646559f6c5 100644 GIT binary patch literal 380 zcmZQz`v3pme`^Nk5Jx8&1_p-B3=9k)F%|{}1`wa2k%3_i0|P@2NSJ|xfssLpp#-Fc zfq|g~EXK*e$e;!n>tC%?#$VKpNIGXo<7 z3j-rmEm+)$!8128J(Xeg>eVa^JPeFr2vHE8nwg$aQp`|L9B&kFz~GyiT$Ep&pH`xv z5u~Z$;S=nm5S)>il3JwToS$2enUh+iV5w(ppl4}hV4!DYU~XZ_uzIyT0|OHS149D? z1M>zbdjbOo{{knl)A<`17@llk;CQltk%57Uk%7H|gW<^nCI$v(5Sx+VNh2r2lLZ`L tJ_kr`0~^DW1uP5E007g;NE`qF delta 276 zcmeyv^oA*nf$9JMfB$tDoI@O)WEdD2su>si({GY(c@V@~h#=yYdz`(!&(g#utHiro; X_5{RlUgTH}^;Yq{){|pQO6SFb- diff --git a/wadsrc/static/shaders/d3d/sm20/SpecialColormapPal.pso b/wadsrc/static/shaders/d3d/sm20/SpecialColormapPal.pso index b706962aa1f4b7b505841e6ee10a797788f80722..8ef66d5132437bbebc46bbc80b937726aa092f03 100644 GIT binary patch delta 337 zcmaFC{DZlkf$9JMfB*d$oI@O)WEdD2{xL8xfW+7s7#Ki&hDHX4?+gqKQ$WHD91M&M zN(^&AY8V(8)_}!085kMV;9{E@7#Nrt7#J8Cm>Bjz)tv#0F)}bRurXYLiai1AWpZa= zWZ;5peh(I8V_;;Ef{Qul=j0a|GOT7~U}j)sU}0c{8UPkIV(`pOOiyK4J+aPo;t>;B zV*@=)BLf3HBLi~_ONP~}SIaXnFflMNG%zqQZE F00011JvsmY delta 321 zcmeyt{DQfjf$9JMfB)?noI@O)WEdD2jx#VYfW%lB7#Ki&hDHX40}KodISdR8%nS?+ zj0{W+B_K5n3=Az`F-8VP1~!HssMs8kb_ON}Mg}g16;QDqU@g%GcYo+Ffc;YPyA(SU}UamX=AkVjz xy~EeQ$RORw$RG_?!@$7a0I^6KtPiAy2`u&m#BTtZ$-u$iz{K#R;s1XI1^||>HY@-D diff --git a/wadsrc/static/shaders/d3d/sm20/Stencil.pso b/wadsrc/static/shaders/d3d/sm20/Stencil.pso new file mode 100644 index 0000000000000000000000000000000000000000..c0a0fffdd0333bf9dfaf21a34f9df5833317150e GIT binary patch literal 332 zcmZQz`v3pme-j4h5Jx8&1_p-d3=9k)F=hq^1`wa2k%3_X0|P?@NSJ|xfssLpApxX@ zfq|ibfq?;}j*)?hp#mz_0anMxz{ns4SLd9clV4=Wu$qy9nSqgkg@F;O)-yLTJ(Xeg zY8D0_21YQ1NQ9?mre~BCGZYlZ8^s$i_+};-KPm8SsED_=ouN9TUauzUMFlAplF@P7dlSRSmtfrH`60!EM>91#Bh{|pQO DJ&Qfz literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm20/VertexColor.pso b/wadsrc/static/shaders/d3d/sm20/VertexColor.pso index bd62a1d299fa15b6830567b39ca4019d2a847aab..39c678df2fbabf14117c097e332467150390b8d2 100644 GIT binary patch delta 34 qcmbPudX`2826{#Y<`$L=t5;72Pt8ovC@E$rD2_LdH(>D1OfJeV&QB{*&L3pl`hMi9S&jp4}xRxqEVfdOpJ{{}`-5HPSeurd5! bz{0@5!oUI6+rY^1WC91nlLi0(GcW)E?b$vk literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm30/BurnWipe.pso b/wadsrc/static/shaders/d3d/sm30/BurnWipe.pso index 50e942ab307466138b4da300e1ecd0c1d9608e59..f5da9efd40d6ef2bf821da76d3cbb8c492e5eb62 100644 GIT binary patch delta 35 rcmZ3(w1J78f%*UcfB*F+vab{{Hqf&)GBD6HGBCHWWLUj=;+_Hk7}!Dl1}2986POsDOkf46;Q*^?U}ShQ J;s1XI1_0))Fc<&; diff --git a/wadsrc/static/shaders/d3d/sm30/InGameColormapDesat.pso b/wadsrc/static/shaders/d3d/sm30/InGameColormapDesat.pso deleted file mode 100644 index 44d67d57bc9c62a1ead29815c1500e771f48ae8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 376 zcmZQz{{R2qe^UnM5Jx8&1_p-t3=9k)F=hq^1`wa2k%3_b0|P?@0|NsS10w??0~MRa}(238CI`mVc-GV022>S%}mcIDP|}rjyH}sVDQaMF3K;?Pb*Q-2+~yW@Co)& z2+l}MNi9-v&d)8#%tSaN|Nj{n E0BUGPVE_OC diff --git a/wadsrc/static/shaders/d3d/sm30/InGameColormapInv.pso b/wadsrc/static/shaders/d3d/sm30/InGameColormapInv.pso deleted file mode 100644 index 78d4abc9d73b945904dfcce04fc46b99b66eae1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304 zcmZQz{{R2qe;o$r5Jx8&1_p*|1_lO@7!v~n1BlPi$iPs-z`)=F5@ujvU}Ruo@Byh| zU|@)0U|?WkU}IopkYY%Iih1THrl&HjUd_V5!@vlJ5Q*^A%=CMRa}(238CI`mVc-GV022>S%}mcIDP|}rjyH}sVDQaMF3K;?Pb*Q-2+~yW@Co)& z2+l}MNi9-v&d)8#%tUBJS?zyeaw$nd{`k%3_WNF7LwfdQh1iQ)eQCWa>yK>8Rs!1jRj KPWb0Tt_DU|?WkU}9io;9{5p74ytZOiyK4y_$uAhXJIT5h@;#n3Gyk zlFGosz>Q7ZH$R18H6sHv10w?q158gralCQ70fTR5a#4P9ep-owMv$h0hflDNLU2Z6 zN@|gUbAE0?W=?96f~B63xt^t|k)E-Ekr9JD0|OH)149D?1M>tBn~Q;=fsuh9%4Td} zg0dMH7$z`q@Gk(V0kIi5_!l@aFfcPP@Ha3pJek12@niuD0|N^K17iaN149E71H%F) qhEOCm3=NEMHS8cg4NMIGConNQnZOD%hXZU*10%ze3IG2yFaQ9A7eUAX diff --git a/wadsrc/static/shaders/d3d/sm30/InGameColormapPalDesat.pso b/wadsrc/static/shaders/d3d/sm30/InGameColormapPalDesat.pso deleted file mode 100644 index ad57fb5768cad4b1a8a50ac90a3dc6f53c259a08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 500 zcmZQz{{R2qe-8%d5Jx8&1_p*#3=9k)F;)f!1`wa2k%8ec0|P??0|NsS10w??0~^Bx zkQxRCh6Ny{3=9m63``6wpkh0~Vi0u)pkf!mdO^Cm;CgR^#n>1a8KmH1E~&+dC8b4) zC7Jno469eKW@KPyU}RunV1%0EnVXoN%CLGh3j+_>B{1=T#GKTUl2is325xNPzWFH( z;i;MF870LG1;z2k@dgaOnaM@@#rbI^3K~J03LZYeJ_^AZi7BZ?3eNet1(`XiMGBUB zM&^2!rbc?k21Z5>WC1If&)2}fFrk5wArx!|BLjN_BiJ1b3m6%GHbBe;i9KmxV)#FSiQ&lvkUjT+NAO#om%uP&BWmvtMg@K0w zWC9~pZ9rm9YDq~d0}BH;HgVtl6o%D|49pCS3@i*VJ>jXD=@})(3s;Kabd%)r3kz`*ci0t3gB z1uP56WFmgOuz{J47%*enF($mPs@E@v&y@8S8NdptZ Y{|QVCPbRQ}%;f-^3lg93|33o*0LfTNb^rhX diff --git a/wadsrc/static/shaders/d3d/sm30/InGameColormapPalInvDesat.pso b/wadsrc/static/shaders/d3d/sm30/InGameColormapPalInvDesat.pso deleted file mode 100644 index 1513123170384b60c209e656a9520df6da878ddb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmZQz{{R2qe-8%d5Jx8&1_p*#3=9k)F;)f!1`wa2k%8ec0|P??0|NsS10w??0~^Bx zkQxRCh6Ny{3=9m63``6wpkh0~Vi0u)pkf!mdO^Cm;CgR^#n>1a8KmH1E~&+dC8b4) zC7Jno469eKW@KPyU}RunV1%0EnVXoN%CLGh3j+_>B{1=T#GKTUl2is325xNPzWFH( z;i;MF870LG1;z2k@dgaOnaM@@#rbI^3K~J03LZYeJ_^AZi7BZ?3eNet1(`XiMGBUB zM&^2!rbc?k21Z51kwR_`iSy%;#ueWO&lR#_(hTE11s?<})&cg3Sb}XJq)_z{tR`0Hh9L4@3E003*=9q<4E delta 123 zcmeBR`oL()!2JLJzyFF1&LNIYG7Jn1{tOHZATdS;1_ltHp^<^XgMop;03^)7z`)4B z#9%Qo(VNG}T+h8Z+U}0cjVc_6z RU|@LCzzD$;{{LrS002vg8lwOJ diff --git a/wadsrc/static/shaders/d3d/sm30/NormalColorD.pso b/wadsrc/static/shaders/d3d/sm30/NormalColorD.pso new file mode 100644 index 0000000000000000000000000000000000000000..7c29176194853e7eaf3a162150336a9b1c8d8dfc GIT binary patch literal 376 zcmZQz{{R2qe;Wqp5Jx8&1_p-h3=9k)F%|{}1`wa2k%3_Y0|P@20|NsS0|x^mgAzjt zNDTu6Lkn1pk%5tc4K6kjq@96*fsuiUVFpy)3a~mh21W)cxH{+joctm~hSiJ=%nXbS zEDVfLwJxc}i6x~)i6xo&c?_PpiRq~ft63O$7(lkb)P$#Ire~BCGZYlZ8^;?k_+};- zKPm8SsED_=ouN9TUauzUMNm3=AMXLn8yj1_lO(90mpkCI$`$ zMg}E@5|A1O28I@}7$XBC0~=gyB1k&}0|O%i6T=Lsx)oq`Yz&MHQgC(7`8oMTh72~V z85x)v7#Ua?7@>+?Qi~HyN{bRpGV}8oJaZG%QyEsXFz_&dtbwTsPt8ovC@G#;uPb0| zpl4}hV4!DYU~XZ_uzK~x9WoOi$V4zQus1L;JZWTO_`iUIfq|Kkfun(u;YkAAL!ZUP6xlLi0(GcW)EK%zR= delta 210 zcmeBRUc*$+!2JLJzyCT6&LNIYG7Jn1)eH;_ATcHe1_ltHp^<^1gn@y<1tiSCz`)4B z#NY!`!@$50!@$76#K6YD$RNd#0u}SjO-xT^SiPEsfro(+3?UNXshQ~+CB+Pk49pCS z3@i+c5aEftb$N`;^(;+|^o$LRj2I^VkYVLwU~FKT%*&{3z`(%Xz`*dNk&WU10!9V~ hCPoJS1}26l6Id7+SQt3?L2?a@3{OCK!vFsa3;KPm8SsED_=ouN9TUauzULDB5 zz{eH!;=Xd3{MvP|Ifex0JmaIA^-pY literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm30/NormalColorOpaq.pso b/wadsrc/static/shaders/d3d/sm30/NormalColorOpaq.pso new file mode 100644 index 0000000000000000000000000000000000000000..e575c71f898b8324347a639b3d1a5fd50899669c GIT binary patch literal 412 zcmZQz{{R2qe;Wqp5Jx8&1_p-h3=9k)F%|{}1`wa2k%3_Y0|P@20|NsS0|x^mgAzjt zNDTu6Lkn1pk%5tc4K6kjq@96*fsuiUVFpy)3a~mh21W)cxH{+joctm~hSiJ=%nXbS zEDVfLwJxc}i6x~)i6xo&c?_PpiRq~ft63O$7(lkb)P$#Ire~BCGZYlZ8^;?k_+};- zKPm8SsED_=ouN9TUauzULDB5 zz{U{QnJ%3=9hx7@mM=CI$wO Z9tMa!2iUv@MusO7I2fKR`2U}Q0Ra8SNsIsh literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm30/NormalColorPal.pso b/wadsrc/static/shaders/d3d/sm30/NormalColorPal.pso index 5b9e9bc8a955e819e25dcdb28053b11075b103b8..251dbbe1e116bfb5cd8e088d17b745e052e92cd9 100644 GIT binary patch delta 199 zcmeyv)WTfP!2JLJzyA&l&LNIYG7Jn1#~2tGKw>Nm3=AMXLn8yjeg+1H90mpkCI$`$ zMg}E@5|A1O28I@pQU(SFMg}H^9;nzHuoxo)BLf@55~$b~uwEtxMg}gpUg!Lr{31gJ zuGNeT%nXbSEDVejW1S{$&=E8?(6cl$FwiqHFt@N|SiO4n#1}G?1sFXfSQr>s7&!PF V7#N;3Ffu%uz`^ij!T4Fdy10a%QYfsuiYp#mz_!N9=4#K6SB$iT%gWn!n3z-mSYW(GzE76wL$iixLm zd5p~UEKQB{j17#87$$Qt%CK@VFg7qvmSyx;VPs%nVr1ZNU}AVOfrWvAg@J>=fq~&k N10w`a`2U}Q0RSWbA5H)O diff --git a/wadsrc/static/shaders/d3d/sm30/NormalColorPalD.pso b/wadsrc/static/shaders/d3d/sm30/NormalColorPalD.pso new file mode 100644 index 0000000000000000000000000000000000000000..5fa38d4760acc24f4b27f6b70e6f2c584f15e670 GIT binary patch literal 500 zcmZQz{{R2qe}4w&5Jx8&1_lNuMg|6u7#jlv1BlPi$iVQMfq`KPNREMnfssLpVGaWX ztO1KLGB7f*!Nqohv@OV literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm30/NormalColorPalInv.pso b/wadsrc/static/shaders/d3d/sm30/NormalColorPalInv.pso index 6db89496438dff4cd1e44aa8ba19b0359ced4cdd..7678d16681757ab46c9f061c486e73229f801408 100644 GIT binary patch delta 347 zcmZ3%+`>}N!2JLJzyJOW&LNIYG7Jn1OpFW+ATc%u1_ltHp^<^%HvCM zje(It3NGfHpOar?$grA`fti7kfrSC&K9CtMsl|yUrA3J)nfZAPp1FzXsSFeAO(q^O zQ8PBsvota=&@(bHx3FYby?V7g0|OH)149D?1M>tBn~Q;=fpM}bV{il`1A7Al!;?lf zhW`sV7#Nrt88{jk8J;w-F+5qo3g)we`HT#q3s@K!SQr>U{QnJ%3=9iE>cCLze7JX!GnKLY~*G50;~ delta 254 zcmZo+S;1V-!2JLJzyJ0O&LNIYG7Jn1#~BzHKw>Nm3=AMXLn8yj0R{$!9FQ;r0|O%i z6GI6|4Fdy13s{VifsuiYp$959hk=2CiGhiMk%5b01ypPYSd5KB5{0p2I7?>Ft_!}4)o=jlic(Q<4IY9gdHijn)SiyX- xd;=pxDAY_4|9=A`1H%Fah9@AJiGcy6hXEqb0d_+JBg2yk91Kqu{Qu9u000uqU)}%! literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm30/NormalColorPalOpaq.pso b/wadsrc/static/shaders/d3d/sm30/NormalColorPalOpaq.pso new file mode 100644 index 0000000000000000000000000000000000000000..b5dd95bc0713663589e9d838f0a4a314c334f464 GIT binary patch literal 536 zcmZQz{{R2qe}4w&5Jx8&1_lNuMg|6u7#jlv1BlPi$iVQMfq`KPNREMnfssLpVGaWX ztO1KLGB7f*!Nqohv@B5{0p2I7?>Ft_!}4)o=jlic(Q8T8>SFw+4CxF;o3=9p74E$g=0|UbZ1`hrOAaM|zk%NDM z69WS?0|S2p1H+RE3>;4uurM&NFfcHJg0O*!fnfm?Lnx9Oh6YBCCkr^hdO&KPG_Wx| sS-=YBbAa_QF#K;|1O-0>djlK8e~5V;VDlRo8JFe9{>OV literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm30/PalStencil.pso b/wadsrc/static/shaders/d3d/sm30/PalStencil.pso new file mode 100644 index 0000000000000000000000000000000000000000..da7a0ad54900e43ac515b1173a2df8fb331a6591 GIT binary patch literal 428 zcmZQz{{R2qe|HAw5Jx8&1_p*l3=9k)F;)f!1`wa2k%8eh0|P??0|NsS0|x^mgAzjr zNDTu6!wis81_lO31}26DP_YeQF-8VP1~!HrP_YwWy-W;@3|w%%m%(Ce42%p?a53ln zoctm~hSiJ=%nXbSEDVfL{hqmr>8T8>SFw+4CxF;o3=9p74E$g=0|UbZ1`hrOAaM|zk%NDM z69WS?0|S2p1H+RE3>;4uurM&NFfcHJg0O*!fnfm?Lnx9Oh6YBCCkq%s!OOtdz{c<& YqMie!|3CvH!;=Xd3{MvP|Ifex0N+kZ>;M1& literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm30/RedToAlpha.pso b/wadsrc/static/shaders/d3d/sm30/RedToAlpha.pso deleted file mode 100644 index e8bff75b3f0d490803302bf13dbc21e795288c2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmZQz{{R2qe?~G%zwe0pSV% I|1&TE01crn%m4rY diff --git a/wadsrc/static/shaders/d3d/sm30/RedToAlphaInv.pso b/wadsrc/static/shaders/d3d/sm30/RedToAlphaInv.pso deleted file mode 100644 index 85f3d1417d7de9418ebf772a8b5fe729882727d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300 zcmZQz{{R2qe;o$r5Jx8&1_p*|1_lO@7!v~n1BlPi$iPs-z`)=F5@ujvU}Ruo@Byh| zU|@)0U|?WkU}IopkYY%Iih1THrl&HjUd_V5!@vlJ5Q*^A%=CIKXNf7#W^`@Pz;W85jUiFEzdZ diff --git a/wadsrc/static/shaders/d3d/sm30/SpecialColormap.pso b/wadsrc/static/shaders/d3d/sm30/SpecialColormap.pso index 5da15158e987f2bda6a5c9701170bdeb38c2fd9b..1e0dd3502f53225434a4a29e58534ff8de92cb1d 100644 GIT binary patch literal 380 zcmZQz{{R2qe`^Nk5Jx8&1_p-B3=9k)F%|{}1`wa2k%3_i0|P@20|NsS0|x^mgAzjt zNDTu6Lkn1plYx;z4KCIV($2uZz{tSFFa@e^30NH)10#bJT%B`%PJWRg!)itbW(GzE z76wMBTClhggJ*7HdMd-})vH+;co-PL5TYPFH8VYIY9jX4J-@{ED*i_LFy6aae&POi~ax4zyJV}BuDxH delta 295 zcmeyv^nfXhf%*UcfB$tDoI@O)WEdD2su>s0t3VU2CyIldjlib5l=vhAqI1R4F(z3@c%yp0|3d4G@Jkc diff --git a/wadsrc/static/shaders/d3d/sm30/SpecialColormapPal.pso b/wadsrc/static/shaders/d3d/sm30/SpecialColormapPal.pso index baa84e7971ef98cd01a49ca1d10f39c7e4f39724..7260951af46ad9b5ca9dcc8128963bf6972eda64 100644 GIT binary patch delta 320 zcmcb^{DZlkf%*UcfB*d$oI@O)WEdD2{xL8xfW+7s7#Ki&hDHX4?+gqKQy3T+m>4)1 z7#Wlp=77{NFfgnEi*YhAGN{4DHiNV?FfcGOFfr_bsyhP~V`N}tU}Lxf6?+2K%jC|$ z$iM~H{2naG#=yuR1s8M9&&e+`WLV9}z|6qNz{0=?H2^Gb#Ne5mn4Ze8dSadF#3Lp$ z#s+$pMg|6YMh4~1~-)e delta 292 zcmeyte22N7f%*UcfB)?noI@O)WEdD2jx#VYfW%lB7#Ki&hDHX40}KodIUr#M1_nk3 zCWaD_8U_Z27O)s210w?)Ll0DJ4g&)N69W?iBLf%13aHo)uoxQyBZCxN%riGJJ(Xeg z#N#Fcs~H)X85kK@7#JbyC;l?kH!|0=G&RyQHZU?`kY`|EVr5`xU|?XL0Ah17Ff=eS z@I%>*4NMIDlf4-eLl_zO8yFd$OkiPPU}50kXkcLY-@wH1e*z!Hn9#_? kFae^5fxUqNZ0=96J|+eRW(E$B*pmhZh9?dG|1&TE0NZ>q=Kufz diff --git a/wadsrc/static/shaders/d3d/sm30/Stencil.pso b/wadsrc/static/shaders/d3d/sm30/Stencil.pso new file mode 100644 index 0000000000000000000000000000000000000000..e864d735e43b6d08b05f2328374f4834d75cb271 GIT binary patch literal 304 zcmZQz{{R2qe-j4h5Jx8&1_p-d3=9k)F=hq^1`wa2k%3_X0|P?@0|NsS0|x^mgAzjm zNDTu6Ljg!B0|Nsi0~139RICH6j*WqlK?<(UIX@@A$dF+*BLg!7BLfQqBUG(tZen^W z!|K&63_J{sU2Pt8ovC@E$rD2_LdH(>D1OfJeV&QB{*&L3m8FOWMFJyWB9*-g@J*EfdeFWpn;L$$pj9DCky`n HXJ7yT;!-#D literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm30/VertexColor.pso b/wadsrc/static/shaders/d3d/sm30/VertexColor.pso index 46d2bc3d45b3dadbc0f56c7d40a921eebc9dd584..cb7f43bedb2ed6097bcd8cff024c402edc21fed1 100644 GIT binary patch delta 34 qcmbPudX`2826{#Y<`$L=t5;7D1_!}4) Lo=o`vpMe1Ypg;|% diff --git a/wadsrc/static/shaders/d3d/sm30/build.bat b/wadsrc/static/shaders/d3d/sm30/build.bat index 8129659ab..a5b193cfe 100644 --- a/wadsrc/static/shaders/d3d/sm30/build.bat +++ b/wadsrc/static/shaders/d3d/sm30/build.bat @@ -1,24 +1,28 @@ -fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=0 -DINVERT=0 /FoNormalColor.pso -fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=0 -DINVERT=1 /FoNormalColorInv.pso -fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=1 -DINVERT=0 /FoNormalColorPal.pso -fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=1 -DINVERT=1 /FoNormalColorPalInv.pso +fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=0 -DINVERT=0 -DOPAQUE=0 -DSTENCIL=0 -DALPHATEX=0 -DDESAT=0 /FoNormalColor.pso +fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=1 -DINVERT=0 -DOPAQUE=0 -DSTENCIL=0 -DALPHATEX=0 -DDESAT=0 /FoNormalColorPal.pso -fxc ..\shaders.ps /Tps_3_0 /O3 /ERedToAlpha -DINVERT=0 /FoRedToAlpha.pso -fxc ..\shaders.ps /Tps_3_0 /O3 /ERedToAlpha -DINVERT=1 /FoRedToAlphaInv.pso +fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=0 -DINVERT=1 -DOPAQUE=0 -DSTENCIL=0 -DALPHATEX=0 -DDESAT=1 /FoNormalColorInv.pso +fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=1 -DINVERT=1 -DOPAQUE=0 -DSTENCIL=0 -DALPHATEX=0 -DDESAT=1 /FoNormalColorPalInv.pso + +fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=0 -DINVERT=0 -DOPAQUE=1 -DSTENCIL=0 -DALPHATEX=0 -DDESAT=1 /FoNormalColorOpaq.pso +fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=1 -DINVERT=0 -DOPAQUE=1 -DSTENCIL=0 -DALPHATEX=0 -DDESAT=1 /FoNormalColorPalOpaq.pso + +fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=0 -DINVERT=1 -DOPAQUE=1 -DSTENCIL=0 -DALPHATEX=0 -DDESAT=1 /FoNormalColorInvOpaq.pso +fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=1 -DINVERT=1 -DOPAQUE=1 -DSTENCIL=0 -DALPHATEX=0 -DDESAT=1 /FoNormalColorPalInvOpaq.pso + +fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=0 -DINVERT=0 -DOPAQUE=0 -DSTENCIL=1 -DALPHATEX=0 -DDESAT=0 /FoStencil.pso +fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=1 -DINVERT=0 -DOPAQUE=0 -DSTENCIL=1 -DALPHATEX=0 -DDESAT=0 /FoPalStencil.pso + +fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=0 -DINVERT=0 -DOPAQUE=0 -DSTENCIL=0 -DALPHATEX=1 -DDESAT=0 /FoAlphaTex.pso +fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=1 -DINVERT=0 -DOPAQUE=0 -DSTENCIL=0 -DALPHATEX=1 -DDESAT=0 /FoPalAlphaTex.pso + +fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=0 -DINVERT=0 -DOPAQUE=0 -DSTENCIL=0 -DALPHATEX=0 -DDESAT=1 /FoNormalColorD.pso +fxc ..\shaders.ps /Tps_3_0 /O3 /ENormalColor -DPALTEX=1 -DINVERT=0 -DOPAQUE=0 -DSTENCIL=0 -DALPHATEX=0 -DDESAT=1 /FoNormalColorPalD.pso fxc ..\shaders.ps /Tps_3_0 /O3 /EVertexColor /FoVertexColor.pso -fxc ..\shaders.ps /Tps_3_0 /O3 /ESpecialColormap -DPALTEX=0 -DINVERT=0 /FoSpecialColormap.pso -fxc ..\shaders.ps /Tps_3_0 /O3 /ESpecialColormap -DPALTEX=1 -DINVERT=0 /FoSpecialColormapPal.pso - -fxc ..\shaders.ps /Tps_3_0 /O3 /EInGameColormap -DPALTEX=0 -DINVERT=0 -DDESAT=0 /FoInGameColormap.pso -fxc ..\shaders.ps /Tps_3_0 /O3 /EInGameColormap -DPALTEX=0 -DINVERT=0 -DDESAT=1 /FoInGameColormapDesat.pso -fxc ..\shaders.ps /Tps_3_0 /O3 /EInGameColormap -DPALTEX=0 -DINVERT=1 -DDESAT=0 /FoInGameColormapInv.pso -fxc ..\shaders.ps /Tps_3_0 /O3 /EInGameColormap -DPALTEX=0 -DINVERT=1 -DDESAT=1 /FoInGameColormapInvDesat.pso -fxc ..\shaders.ps /Tps_3_0 /O3 /EInGameColormap -DPALTEX=1 -DINVERT=0 -DDESAT=0 /FoInGameColormapPal.pso -fxc ..\shaders.ps /Tps_3_0 /O3 /EInGameColormap -DPALTEX=1 -DINVERT=0 -DDESAT=1 /FoInGameColormapPalDesat.pso -fxc ..\shaders.ps /Tps_3_0 /O3 /EInGameColormap -DPALTEX=1 -DINVERT=1 -DDESAT=0 /FoInGameColormapPalInv.pso -fxc ..\shaders.ps /Tps_3_0 /O3 /EInGameColormap -DPALTEX=1 -DINVERT=1 -DDESAT=1 /FoInGameColormapPalInvDesat.pso +fxc ..\shaders.ps /Tps_3_0 /O3 /ESpecialColormap -DPALTEX=0 -DINVERT=0 -DOPAQUE=0 -DSTENCIL=0 -DALPHATEX=0 -DDESAT=0 /FoSpecialColormap.pso +fxc ..\shaders.ps /Tps_3_0 /O3 /ESpecialColormap -DPALTEX=1 -DINVERT=0 -DOPAQUE=0 -DSTENCIL=0 -DALPHATEX=0 -DDESAT=0 /FoSpecialColormapPal.pso fxc ..\shaders.ps /Tps_3_0 /O3 /EBurnWipe /FoBurnWipe.pso diff --git a/wadsrc/static/shaders/glsl/main.fp b/wadsrc/static/shaders/glsl/main.fp index 096db0c8f..4e1dbe5c2 100644 --- a/wadsrc/static/shaders/glsl/main.fp +++ b/wadsrc/static/shaders/glsl/main.fp @@ -17,6 +17,17 @@ vec4 ProcessTexel(); vec4 ProcessLight(vec4 color); vec3 ProcessMaterial(vec3 material, vec3 color); +//=========================================================================== +// +// Color to grayscale +// +//=========================================================================== + +float grayscale(vec4 color) +{ + return dot(color.rgb, vec3(0.4, 0.56, 0.14); +} + //=========================================================================== // // Desaturate a color @@ -27,7 +38,7 @@ vec4 desaturate(vec4 texel) { if (uDesaturationFactor > 0.0) { - float gray = (texel.r * 0.3 + texel.g * 0.56 + texel.b * 0.14); + float gray = grayscale(texel); return mix (texel, vec4(gray,gray,gray,texel.a), uDesaturationFactor); } else @@ -64,7 +75,7 @@ vec4 getTexel(vec2 st) break; case 4: // TM_REDTOALPHA - float gray = (texel.r * 0.3 + texel.g * 0.56 + texel.b * 0.14); + float gray = grayscale(texel); texel = vec4(1.0, 1.0, 1.0, gray*texel.a); break; @@ -457,7 +468,7 @@ void main() case 1: // special colormap { - float gray = (frag.r * 0.3 + frag.g * 0.56 + frag.b * 0.14); + float gray = grayscale(frag); vec4 cm = uFixedColormapStart + gray * uFixedColormapRange; frag = vec4(clamp(cm.rgb, 0.0, 1.0), frag.a*vColor.a); break;