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 zcmYLFu};G<6g-ELdO*sKkcgPd5`};S8EFq*jiS4vb-A%*L8MOFt^# zfjP&hJnQuCp3l$EhNJb5zC!YNJ3ayMO@OrnCZq8Q)J)HW0||jMypWs73F8yo`7i~> z7vaEV?Rf7?)LIo6Xa(H@1H#5+vsk8R+X0SPGt0(Pnk`q`5_vg~<{|F0*Fu%*ed~`N z&i%XTZ0gTei?_7!6Sc{+HAx&?hCv*KVGxDaH!*vjnlXTi6Yl=GSO4)E(rd>3_#Qpo v4zg=xuZ7W-i>^7`Ytu(pR!j0;*H#aWzjmP;UdZq0`&E+X`5u0m)mj6;y)r`N literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm20/BurnWipe.pso b/wadsrc/static/shaders/d3d/sm20/BurnWipe.pso index b1daa59be6438a131e5ac388d13cf4cb88f67620..c2a99031f03d506c6f32892050f57878bbc2ccb3 100644 GIT binary patch delta 35 rcmZ3(w1J78f$9JMfB*F+vab{{Hqf&)GBD6HGBCHWWLUj=;+_Hk|+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 zcmYLD!4APd6r3%h2T6ZGqHbK8W<}@`7m|uZ-5a53LMrM5>JRz}?k+y6-(k%X`gSKX zZ}Q&G!cgj^+L)|H<0gOw0eXU@d)$C2$t5a;fPo=d*X*?3M|eD{XwcW^Tjw;Cp^JIE zxg=?_yV{*)*Pi-;ZwH6?I lk3V0sIA1(r7WXQ^Ti1OipmKpCuaz^}r^gKQvy&+Wya6L*GAsZ9 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 zcmYLEF-yZ>5Pg@%HiM8|1T*RqN~B0fTL*=9v5IabXlw%3lq7;<{0AA`%$}t`D!;?e zcPZ989(V8EyN~-|8S`UCnBHAZjsbiVpw?qij!)o=<&m%;%syh(86SlDgp-n0qarMN z1V?+{Rg{OtdlnW+`i7=ygj)ie*u~8{Ttyt%IHabzi-#y##YK)yz6_Q_%#)`q&C{2{ zJH0*gu4jvxw}`{%DD$T2dXv1e8T-M7KOP1C`7j7@qNhMl>uvvgxBBY^`@VwX)|2i# zF8%EmPFp+V0!Mk-M_V6se9&>heQg7_U{DGSfm-NO4V~7iUQw%b59r?2U243`*>Pil EUknRLvj6}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 zcmYLD%WA?v6g_#USroDtp;=at5T+Dysc}&u-PA%if`lfGfl9<==SKe^pOC#9KPunh zcqUSFhr@Yr@7xPr%Bvi~|C-JQ01gD0=_KWG0t(WcFbEAg0J31MNV%J<|E(bYq9q5k^bznJo_!2m(QW|9xMZAxe23q@A%nvm;O;q zTrqYhZ^C``gut^}4IFvZrPX%%uQfb$3Cpf#&G|O_>kF*9;;^Bir~Ii4S()Hb^creH TmgKV2&Zs_S+-Ws`9Hj(q`bIh! 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 zcmYLEF;2rk5S)vRae?F>A>k4lD>8~uN)if?LPJ2%MHZOY62XyeBueK8F6p@5O&;ZU zaLn2e_B7g^+1a~242=0UBTVluCPx6i2vD<_gkuAIGCdLlC>{ri=!_3Se2SflS)wKe z^e7zee3x+%mG5~}rr8^srcs<%CjPS zDgBe%Q~zoN>!_s}?Q4PG?zJW(ctNA0Oru)WW?G@cze&41 BM8W_7 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 zcmZuuu}Z^G6g@AAF{qGT1T*SVN<^fitwV(t#43&@*w_YIQfUL3Ka^(Dx!-6Pe(WVrk(UJFBZ{IBYLY=u9hVDl>T|)s zp4wrfUwLysNqiXC{ZAi;6Wsa1be6_LoTKYwr#~1CoYBmi_>t2K z7t3Hy(rLM8tbq)IJm)qHf3p6}~W#?->6XacWO?C>DD_CW2fWHcz zHBt`EHQfI7q=Fuc1_4XYU6vn@s#5AaoT?8}g5=um*lh`f_Er_i+mSAHWNJ(k(04X>+K$G%YUZFR-?j8g9qCjTQ>NQrtCoQ6MN)H%IBb8h;>zB8QplVIue;`t(s7<63k((PP$?s?nu za8e%`$atIeF1GVcEU=ApSa#9yTrlpcXR%pZtzlIK-;Gn}8X21w8Xo@UWP&;5xT9O>h7J 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 zcmZuuJxjw-6g@AAF{sd81T*SVN<^fitwV(t#43&@*w_YIQ<}J^{~$l%jY5`=j{XF9 zM>F{&e4h7etAjTj?z!ikd*4T3DfOi~Xy2T-4gh=-pti-NYb<~drkt=K__-*^bx6V{ z1XrG!b-WPvkMC6rj5oqE-8-A!ccZyn?Bg(QAW|BkCDlVttDB^;H zJ+s4FzX~T&mPK%|`=8!RhPaF3(Kt&nO9#QAfnIz+PtxQe^N+5N{Z6;v_50&+7|s25 zGM&W}l4d#_D*R^23o~iu;ih$JmY9Fm>k1Ci8 S-3OSn=-JeGFK<;V1$+Z>$6-kT 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)WEdD2s(~0J#ss85e1=8_h7us<0>n%V91M&MN(??A zaUh5RVrC#_1j?j<1c1OfKPSJ)kYP0=P==9#g@JLRskeZ!fu5z2fq|Zpfw_ex!|K%& ld*ml>7gb?l04iYMZ(v|}0>TqG7@jO(1X}|U`~RPT0RY$)APN8g delta 132 zcmbQj^oP-uf$9JMfBzL3oI@O)WEdD2{DBxG#t5W9e1=8_1`i-*0L08d%*epRU@ z4{BS4VCR!r#}{GHBe1*i1!7lNV z)Jj0XZJYntEVpq9!>q>LQ%u&h4UD#8!$4r9^7Rn1GP>L-1lnSVw%Xh3Di?UF_=mhB Y#*#p#_@3)#syU^>K5G2ho|6*z1A^2{TmS$7 delta 219 zcmbQjyo0Hpf$9JMfB$tDoI@O)WEdD2s(~0J#ss85e1=8_h7us<0>sQf%*epR-~*&V zAO?t;7}$VfQVc0z5e5d&+{E-$hSjTC7F6oqkga@s;w z-2$6{uYu|LYHXAC?5|Sf7K{JdpRejUq_5k}iatH{0C2^N4DbtHV^2f? literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm20/NormalColorOpaq.pso b/wadsrc/static/shaders/d3d/sm20/NormalColorOpaq.pso new file mode 100644 index 0000000000000000000000000000000000000000..4568a92925a5c23157a279aa861eb861ad10dbff GIT binary patch literal 424 zcmYLFu}*|g5S)j2zQTmwm`JR&A&7;Nm>3TWP0m73V|gKpcO;x#0DDaQ0PHL&O=#%+ zA-+SL2jpCs%+Bn-g?-T4_P0HQcYiV71@J?Fo=#F4??6q82n`Yf`^c2f_#iYo0;9F} zNpFJ?tbCDGd=nab1a{VaUL3{A5h}rM0iEdMGD!XGE%CE3e#Q0Dp9iRPY_qPOJ|2T` zzQ|In(wQ@}aT7izaT>p5=E2>ec{Q0%%;~~^4ieLgm#Z*h;#$YHkT> zHUXmq^7CPAM|yDDKR1dYFCdL_+^uM^r>P;EQg&J@osZCz9Ly`&>a@T^$-CsM ebenUBQuUGf9d!mny_-kf6p}N#y6nBS1^xhb@Jp@$ literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm20/NormalColorPal.pso b/wadsrc/static/shaders/d3d/sm20/NormalColorPal.pso index 57b34eb352a80bd980f4ce863cc5892d58933d0b..126f92209270d4ca04fc19f94b7f08977e0fb618 100644 GIT binary patch delta 211 zcmeBRp1@qs!1VwBzyA&l&LNIYG7Jn1$AB0l#sZ{3e1=8_hW$V)2Z)&%I2afilo(1t z;y};>#LPg<2$bmo2>`(yAZ7-NFfy<)ECGu!Fl+(ROhCxUzy;UqoS&0lWXQm^nh~s= zg@JKmtkc8|I)cUqdX`2826{#Y<`$L=t5>g{_(FcNFr%vq&_zJR-@w4|1cWDWFg#hn N2zC@i?EilT1^`;oC9MDe delta 194 zcmXAfu?@mN3`L*sA`~H{FaU@Nh@wLXC0Xw zes*mud%=Y84O|ZfcOLLooHfx2hO08xO=HyvBkqHNN@=u(F|X!XPCFTX w5;a3LpXJ1D^4;3ytHL?jR2IfdJC|djFGk3`(ANp*WFGpsN7nI9`gb9~4+8KY*#H0l diff --git a/wadsrc/static/shaders/d3d/sm20/NormalColorPalD.pso b/wadsrc/static/shaders/d3d/sm20/NormalColorPalD.pso new file mode 100644 index 0000000000000000000000000000000000000000..a8b99c88a54720f02e9ef21cfe62c70dc2700929 GIT binary patch literal 512 zcmZuuu};EJ6g{uh(x?f$F|l#dg;X4rQE<=%q7jWFX{16E@R7Fe^$!>v9lFx^f@pdw%`wHIn7La_77oW~ncn)}|h0(>wVdU|y^`>8dH&W)wkltUTrArpFo$zBo1 ze&ogXp%(}84yPlp?;|s@u1{Hb&b^@@$39G~{inBO57&OsAH)&HQMcB0(GG4x8Oht& z*}2$tPFkIo(;0X@KXjUMG!BL&_3FM`t=C+)T5}H$>&UWfE58bm@RrkGUYX4K1a>7| za6#VCpQu9rYzljpn&2y<#2N_~r3SA4dJ;j8O@n})&m58t)x)$^oJIaZGB9IFD T3QeDr`zAK$*yC?3G^Kza`|Vt1 literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm20/NormalColorPalInv.pso b/wadsrc/static/shaders/d3d/sm20/NormalColorPalInv.pso index 2c490574c0cc749eb586872d6d90169a2a0c9de6..da4cc50945fcfb7d106ae369c6786010b2bdfe60 100644 GIT binary patch literal 528 zcmZvZzfOZt6vn>`NQs(sHzpD%T^g)|cC>ZSq>aXE92;V>C26Gr-0=-MI6AQ7(ACXH zaP$Ef+#OB4eiz#6;7JbWJHPYiasir@-|`Ht%cJHd08OZelqQ49@c?`=Jkm8-5ZK0( z;c#cQ_rp0}q*j_2QI8&$ⅅ@E?Mwf}f0=;PY+2g5kRB6r&f0k4jag_Y)f4QNO;THudYt#dJ3zW zF0`O-7N4lf{(J^2PYv)Dp)*IqMX83Xzdeay54kQ-Q8N!FWNH<;l?ddCi9B7I*Htb! bU+%0>OFB};OIDn#_Dn6#vBuw8GAV%{*E?VS delta 266 zcmbQhvW2;xf$9JMfB)?noI@O)WEdD2jsr1Bj0H%6_zaB<3mCjK+kH8R(;G&RyQHZU?`kO!H_z|a7+Yy*PLKLN&OoE*s*Y{S674pi}^k&WU1 m0-!-mj12q@j0{gE06hXk{2)0HA4E?8$un?3#Qy(hU;qHhtSnam diff --git a/wadsrc/static/shaders/d3d/sm20/NormalColorPalInvOpaq.pso b/wadsrc/static/shaders/d3d/sm20/NormalColorPalInvOpaq.pso new file mode 100644 index 0000000000000000000000000000000000000000..f7b73e6d033f91a09b2f7c4234b92fd3ce5b0873 GIT binary patch literal 564 zcmZutJx{_=6g@4qHfqw{nAkY!LMjf*WCRCIAby~6B#l&P0+y7zmw&+E=+M0mtZx1U zM}I&EcSjSS=RFEK_>$Xm&$;K`-uIvj@h#3!zdEXI0MIr05yB)$jxq2>cx33XpkWJ7 zQs;SQ=u|YA3+;tkiJ`IbN|fh~Q7U}zN&!BIy6Rq8^nNPMq;q|t)x&-m?IP3E1cSBN zIrc|h{1AC@5Z>c-;B|du2G-PH=ALt}@5iwZ1FQe(&9H+TKj`-25r(67rR|~_+(zLj zyo;Uf%N^&W(P}uYp4agsrydT5L7z#ryyupy71u3S-2H1)K7U z6nXpUZ*EVDd;-f(=efqbrk>8GKcB+NQv+NbC2}Mjlq#_vsPnm(WzX1zNG-)J q$rBTK%EjjOL}UMKrt}MPq|!&^7}bbDG`r=C?kuQ#8QGI+w|rSQczO3H$_@H zK7o=Ca6wOr#4&eq0tF}S&F<{%-rhnN;#-`ead~jK20+*3C4@)YefAH%YvYh24!Bo$+#F>?4k13loJB@0qq`NPyhe` 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 zcmZuuu};G<6g(#(M1a&CArUdbQiU);N7@09S_x4QV-?ZRR%(^1%?Fr`F(YI4EE)L( zc1AXo@4%cLS{QiN)4MyrXIp1jN`0vdbZ*bvdjLL}ptixHIi7$I7Rj{WLEr$-#5!J> zHdAmXXVp}*IFl;CW~Vf!kpl6ua2u(G>TCa4tA*N zRmXKSjng!SgYEzHUNXdeJQuB@|gOEH%Iq<7gN!{7y2P zPo@N|=1I_Og+b5^gVVDXuPyfV^Nj^|`HLIb56<8<@)Z`uZDUJA0#ymG${p~Du*o5L zP;TMwZ;ur0@yv|SGtxzs(|=m4xwc-(ntLmr)qIn@%3LU(sr${H(&Icm;&;_tDc~E9 Ch*rS> 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 zcmZuuu}*_f6g>|RiJGt*6N!^94dS33EkiYF6Js@w4YAlZX+r~i0B(+qj_fRqeuBHB zo8dcro(EbTye}vB+;i`{yd0oO`6>JGZ_ayr06qv%+h9^P9)WkJjL={~-~dnLDxL|Q z5bPApDk?&!B4FaBQGi!wjYnW>efO==OlrGp&5ssQe2h{w8w~c^xLgL)5M^m#hnhNV zTm_3TO+y&i{!br96WoRK=`2mKO2*#U#c+NfM@jUMI)~Rs&c$Ffa7MFW62^`nEm!je zNw;(2cDkPHc0Bj=tjo`q`|A0P1$y<%?fjePu=1*rIIfv`4-?uzw z-t6p~g;46Dnh2IdzYbu=1~r4AXWW1h!DCn01_b&Lsqgl1VmLKrFH(#OI=+^En^K|+lhs6wG%BEAn-CUZz(mBZ>XR_x&}(6>9pHT* zZxfu)HlFFLbFGgg-R_E<+9K?Sf5=y26=Ift9kV>!6#nbH<4>bSxdufB5w4_?FdP9q)P<9>62+njjWGVr8yKV zL%~Mn`J^}YML8If9rS&%%2a-iMzCAJr8=`b#NB$aOwcrqi+$G2>Fg;i`uu z-TlWOkmGt{S09tNJIJ=?n~uOS7@XaNx(6Y55zJAcgt8*iqpb&pc(Fn+LMb-30ZU4go0shy>?7pfOCKuF z;X1p;`Yprv&3r#Qkk0+MKE`hkqe}qa1gJ?S&#?m?oE z^JRhkKE^q9|Bf*&%H^u5$s-~@>6?0{X9K*HAKR*~KAZIV^(KAFCwV$q%@@Ts9arm3 z`Nd+G>HBPWr?cCE*0}Ot1BR{+|8-*jYJpR2p^|nK>?fS>4p3c7Uy?JPTONu8&Wu2} tBdiLu!uL!MT^j?jgd%sGah5P%19w0V++jZ6kwFWbIz6hyNcNoregQF6Lt_8{ 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 literal 504 zcmZvYu}Z^G6o&tshBQ^7y9fpc(WS&VXhxewp%t-;V+l64ftHje50JirgQG+CI22rc z1VtKMj&3fR4@oct0B9E(phyB*r`*Izt=%@O}}+(L-V#TpwEJ zy+O|!O#D%>u)JtC52sAr&avHb9oz0W_Q|O$zq>1+0i=B4>L-7M+0K4*!Mv+}Nt>Et z1+&O>@LFiFM#|w#!|h*9DyT6j5HRITYM{vYE={1Bn#?)FUNaRamMzwDUsacq)f!Y9 N#pFEirS_F2@C_aKT(JNE literal 488 zcmZut!AiqG6rA0L7*x#N3g)PnQX(QfiS0$91+j|95^QV(Eh$YtAO(*e@&O)l6msd& zqc?vf-{CsD#_GXMhBt3^-rL;=snn-BNALEcdjQ~r05yw2=U4&n3^SrZ2uP%idOZ;h zDgrj1jRL$dN`3;{c&)WJquJE)an1m=x3%jO+sJ++0EKJi77IyyA2k{uCFsEAF z|6ccDG?}Ie7RksTwK0eumT?k4rry!bv3J=Y_PyaW7>7%*7ta^bjHJ`@&sv>Rzje~~ zeH`j50~uel{^f4|!v!`xhvOEto(uA>8H>x>Y7M6aVONUa~j(Hm>_Ed8i_ zN6k4w?Xynr?!A+BHe6%&<__`eAFEZCE=i)`Rt8ZhWf02yhlqDx+8Drw33o^C>3^;vymHXQ_vop2 j5OsOdXhCf(bgNJ8UiV;1UdZP*{*6FgGB3ZR)y4pSJ&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;7ht9|8OkV6Mr_YWx5>uO-odgupY_1aP@_HuhSQlf^GqaxWxFd*+wW!2lvd`bBRS1Z+FKGNw(^(6yD>HRA>6@=(VRE zZ#0=ryxDH^8KqvR4@tZy3H+Y&gRWA3R}EeR&V1q;H^7M-=9b@)3%E7sD> qdMfIwkhK<8pIWF2_Vas^+RicT=htw{nkgK>;f&fV*e~ff2KWc<**+)$ 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=;+_HkhJe-vUffhD-J=#T8ZBO0qq(I( h*C@UEO9uNDeO0yq-j4F@%0gq#_jGpaOwdaS`~c>xFc<&; 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 zcmX|6!AiqG6r4?BEh6SFf;s9Xl$0Vp+Ip~1FILf82^yP#H6@AQG5*0Gy}9@NR(`^Z z>%6r1mf_9JzMZ_lwf5JJFul8+oB;SHK+k0pjZff)q4?FS^kEmX%t^6c*M45>v)y$!owjwIoo#!=2&Y_S53-u8g&&YB_&cs@XUF+9 zjlORt-S7CEZ>d|;r{*@I>mFLeEb1d_&76DV0iMD>x#Yqq{M6#1^IGOx?J!H;F~7@E H)YbxjYG_7b 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 zcmX|6&1%9x7@XZrwUk2cMKDK&5+tD%k5vy9(n}S*2qHB#frg05%}eqId4$}3tvpB9 zSq*;6@XZY0-$H5quU|1;eoT4*P6X&lCZkaTIn#_#gn&fAY+_AFbm+ZccXfbyvfYO` zpDjGoH}4j!Fy2RbMy&|z?jN#^zZu~x{yC;u`kOn0@1gS^w!k;jGvPq-_{c@>_0E#c6k zaPsfFPOGH;ER#AfKG1cY;w=S_*v0KSS*2`vIHo3N7f)%v%IXT6YB^dCahJc8MOD1j z;rabVcr#zj!$p?7re!!Q)|>pD#UzR^qscgqM#DJ98J}_hd79fweZ*Q}u&-6)>}zgo z5e)RS|IUDZLvFM~u5c)P>%;1x=K*J!#)r|I-S>qnJZcZ{#IIlpXwgMOuNm&Mt;5-J NkNadUeWtY*_yaU=OE>@k diff --git a/wadsrc/static/shaders/d3d/sm30/InGameColormapPal.pso b/wadsrc/static/shaders/d3d/sm30/InGameColormapPal.pso deleted file mode 100644 index 8de88be2a502c736ae1e427608c8addb435a166d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384 zcmZusO;5r=5Ph?)LeQjtz{DQm(vT9P9EFP}kQl&(8#GXr1kwh2@Q62$J@^B9;MTvz z?{Iy)G{%FonarCvZ$1`|*5CRL{mFgr3P4E*IfudI_y7(JQ@Y^<3UfwdDcvC>ILEtX zfKNunCurcS;vP5AYmBmVacR|3@lVk@&axOTF8AnvMfvZyVY zD{})}6@oFSL#|=`r-pr5)1ZdGEj6i$GUsf@2aGe$9jhJ!yTo!2WHD4C)Zbyth$ zKjS%!X7en?GM#iM9gL!vRgxyJnS1_l;oc6%Lw7t6rs2vRB#UJf6ZAa)%IjVFUbo}> zIOCNMfHhx}8{8%qa2hPuvcc?@rz8r e3ABu7V?#Hd7JF9o=v=ZE@1xkuXbhig4SWO1SW0#P 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 zcmZut%SyvQ6g`u~SgO#y2xh69Qc^^^v~{7-f>_062{yKY)|4jh(?7^3%u>h?xbzd; zyEH35!tva+78l;(GUuLq?qdeFG2iAAz1#EdA%HJB$nEfw7%SkDS4Ov>cwFSfVw!H# z6*Diq#a`+5M)xKJ?VWB_)%9)dN5#2R9&EXbFbUG~MJk8vMHlWCe@k&N1-76#G7GEU;h)H}X8@hU8~|6XO@|ZQgfFoFR^01^c1~8V+2wlK0_k|g9nf@0Agk!W@KPuu$Y+W z&0}P)XK8ArXKY|(#4vG>3@aA{V*}H~i}ET!olJ}j{0&SDPbRQ1Ft9Li@Ha3pJZWHr L;0gc#GcW)EONknz 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 zcmX|7F-yZh7=4$sZWiGzLTzK0`(~}< zF^XsNJi{`Z4yOvY@l&cZ{gS)KcPH-kcrtb;^YA%J-9RsvaYEvIL*@AcrM!VUJNHr7 zha71OC^&6t_zt;%({bKXLORu``xS>Z4RupVYEEHv(MMCUpL&nFWbZ@8H{-WWZq7m_ S@LP1A?9QOql#+dI3;Y9I-$i2p literal 0 HcmV?d00001 diff --git a/wadsrc/static/shaders/d3d/sm30/NormalColorInv.pso b/wadsrc/static/shaders/d3d/sm30/NormalColorInv.pso index 7215d533d943650527ab972bd42458b6507e71b7..f0311f4a10930cac1fcc32105e4b050b37ccf255 100644 GIT binary patch literal 392 zcmX|7O-sW-6r4?C8brul1cN8NgxDT5;Kjy+LcLhUV+k7DKx#@7?=AQP(woOU3b}am z59N2b&TgS^cX%`N-hQH|)StRS{CGV&0`N1 zvw2-%Sxtx25ck&cOMipQRgx|0^QKws;%10`LfU9Rg^4m!#GOkHb%C&@qL V?2{`3Qv1ep&7SnS#^pMtfPVm%N;&`l delta 210 zcmXwxJqp4=5QX2)#wZd=FX?PGgcT7>e;UD3u(1&g(Zb4f7H&Gr1TSD8Z{T%u2rJiF zgEM?Q<{Nl7`J^kPF(1>%d_A2704|Jm#9?n_K+3UTBqKmraoX831eaYG`=0@pr(F`G zEFF04?bfr2kI5lD^DP`OzJE9i>O$}6;3-jP267V&l Q${lb+%eOx*YI0+MFI{paqW}N^ diff --git a/wadsrc/static/shaders/d3d/sm30/NormalColorInvOpaq.pso b/wadsrc/static/shaders/d3d/sm30/NormalColorInvOpaq.pso new file mode 100644 index 0000000000000000000000000000000000000000..04b199b92f1566356d0a40d5800f1a7f48c7d568 GIT binary patch literal 428 zcmX|7!AiqG6r4?KTtvuS1cN8NgxDUmAc&0zg?i8`9!t>J23k{+cyFN}5N{s$DCFYJ zAIf*Q&TgeI8Qzbk>S+s0g?l z?Sop25ZrvSoBARgdIa`1z9^e!`3Y)4w?La%*Hu!)<$E5NY4(PjSv*cqx3SB;dDium zq~l3hU|x*6qY$_0bDkC1Yv~`|AN$vX;lLkG;+G`%qii-$ryP1gHw=26Fbq23=~)kT zeFtm-o&pvZ|FO0m@K?E5@D!DqcQ^}pcBY|%^iU^QkwLWQNwjAGcynA^-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 zcmX|7!AiqG6r4?CT|~%T1cN8NgxDT5Ac&0zg?i8`9!t>J22xX!c#q%*#GA)G3b}am zhw>e+v#Ip$4)4vp*~jjpr}eKsMR<2U+6C}KfSS!@INpG7rj)QCA+V3q=!|#5q9V{= zYai5lgka~B*~AxN(Ic?4_JvuRv-sgLXAG0%$ZxpWV158cc0Wb97n(NmneVYXN%DT}}x`d%>beQ)3&p9E-{ z8(;%)6i}W0kL}VPugXTnSJbB7VlCiwH4QbSqek5m9eP^wR>_V_!>c}8#q<1v&5jG) eEB+<7;hM9cjE~s@%o(iuvYSV}ttDq@4g3N9$4QI; 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$AB0l#sZ{3e1=8_hW$V)2Z)&%I2afilo(1t z;y};>#LPg<2$bmo2>`(yAZ7-NFfy<)ECGu!Fl+(ROhCxUzy;UqoS&0lWXQm^nh~s= zg@JKmtkc8|I)cUqdX`2826{#Y<`$L=t5>g{_(Eo~0HcQl&_yf^9Q+Lo3{M&u8J~a&&kzv&^ zn8&}_k2zvP_=XkR{U#p)wYGIu(f(ZFr8sC?Cm2r3HfOC>BlNj+2JT9uCnP+}M?S2j w+eB)*l<(=lEwlB)W%HSHRI!YD3F1vPmfb{GMo7J(DI$o7QxA=oe~S>{2P6O=P5=M^ 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 zcmZutF;2rk5S(+2u>vAJLc*egCNfC@DM=_mN(3Sx%E%%nv6OI;ZF=(q7nBt4%?Ids z0woV{K~IH{Fmp$UC|GH4XJ==3?+%r+{3=h-IX`G`05Aj(au$QiaR+=d+|v!%5ZJpkR()Mj5<0^d75SRViY 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 literal 516 zcmZvYze>YU6vn@s#57c)y9fp+T}o^R?P%+u(4ttyu>>32Kx;}8_x24kI67pHFW}}Q zIQjq?+#Ln4-@Vo1;DwX(o!|L)Z(vIKCC|{gJZf(NFa$qjHl2#G06ys+Xa*bz?BG#x zo+p|?B4DrBGnq*f%)HR6^GY*+>fST~-suh9U0wBlXlAo=bHzH*B#QS@2tC1KZh4M_ z#82;IKMkWhoKF2wfWpFt-tt>>?oWa=4PasYKi-RmxDLY6I88812F-zoUU(BnNpzdK zyBB-zNw?p1`(u9?#BL{=&cX>rtKRhLt%m2-8{WZT3q?_E^C@e!MeqqMC0fKu)X7;FM+b4y&D|C{I<&YtI2QT>j&2UVMxUec zB#1X0&dqm!LNd2>E^xGN^bE_*e9;H+rVMjw=8hD2(TE#^S+`L%@lZ{|X{^Fgq!b3+*a8whmYdvXE)e{3 jk;vOttRtY!jymQ?7a;z8NgoH%}O=OY+QXvuwkP`6-5oKf%lUPb{WSidkgA|k$?#&O- z@d=cCfD3v`B+T69AqrMr@9xa(?%knO6hFlUnl~qnZ2+3!kC?$AYfOP}h9|lP69T(< zmN@N&t`QM1R@f`C5?zpaW0dwzFD-N*3IRSDHPu~S^?oVLpmJ-4HG@$Q9v~BHf=+I3 zr(Wd7kD(j;!2{06?!ZH)V^eKeYA)T87snoSZ2X6}gFbFOe=v+AOrl<`=b-K1g+UbD z$M)X!zJ1o}wCv8%?R%l!48{|G#H3!SIhA_VaVk~k@TiU~%dUVmz)FGScyT-xc6db+ z32#4>d6~I@rE&^pFs)SLG8fDn>gg=%b8>mA1N;PQBow6@x_>mBMGbL2_qyzv8Yogz p)uyZy19{5*OP;&Ciz8NgoH%}O=OY+QXvQhNQrm^L>XDcB$g5`vQ2OPAO$6bd-DTy zd;%pO;DVkK2{U&I5d|yn?dVMbpVFoLC#`OIUay7hDW*q8v>hn zQatUMZjceM7TgQD3SF@B%Bbv(UYYCOH3NJw8oIl>=>623MdjLpYsry}c907_!DMY_ zM?vf-_mQ83@(w3se-I!yv8uQHYR>#okR$<2to+A!WFOZ-I2a}|CULLP^Uw)zA{oou z#NE2sc8}ZLw%Z;0{UCB%ay$t~1kGB*t2OJMSF3xwdrjndehw@FP6nj=^WW29gI8oB zc@^tQDCF@Dt3DQj{6E`lI12YHZzOtDe+Ck#QfN ie_7{(`q>PXm)wm^=@>aq^39%itqs>r-7Q`x!CD_;&T2k8lfVeqkbj+T`(VyV% z=qC9cKF@oB;^2K;?s?~)`|%!ZrG8W&(cNY55WqJbG}+nFdZD`8oOS`(*#xJV4s{m zjorkHB+C*w*!zzkrV~6Q^XV+xV6_={#vz9D$91|%pECdC_SC-`j0XN_7EhA3AEnFH zd_m9+I$_XlhhfkT&o8w_N(=XYH0(uOV 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 zcmZutF-yZh7=4$-5UP+}1cQ?8-rL9F6ff{kq;<7+Fl$@_y>0JjtC`gHx0)|wnVg~$?Fj~JU0kn%MTn|0ut!a; zE^dN2%(4&$cK_2Sa*l^ES}d~^>vT4pxtK(ciA?2F<{aOiI9KE8*qJVad6+o9T&<&+ z#On{;zBh2){=hvu_jqk}$np6fIbT*N-Xj;VTh2)eSazv&#Rd7O{T7@4nzgz#z!4$1 iM^00z;r@?@XVJqqu_SU6P3N~%|2yxg3k!AGG{7(4PD<_CW9g1ODbWRt25@ImrFDy1!2WA-H~yL_ i6`J;Q{yoX2zvf&&nQzcfUtL*%MGxQl{G-;Wlmb2tp)Je+ 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 zcmX|6y9&ZU5S(11hzRLLFolJJ1c``P`Y04)V+0#PM56|jh)HLoe~?c|?{DQhJm;dg z$FQ@*?(HmeDc`b<@p3q-0k{*OCYV%>ClE7D2%XR%;4-UN69PqQRqS&Gm|eC@vlVH6%>tGQ@dQ`d7X@3h_fH)|YTuECjPU^{(# z&~xl=$8k{S>H_eft3>fKxd!vcwTJj|Zck7$(@}2UWPipwOL-s9QFY^4giPsEaGrBn QVt@uqc`yIW6cQ}79C@L%^jkr`_U@ z7YFTwT89wqd@|ekA{=z7og93TPIY#TTF@=v68mWN0FUd%GDcn3E{@r=Yah>XvRoB8 zHu-!wSC}L(na=fF;ayIzyod2@?9En-*EsVcz1}1#i_jk`KMa)e19fv7a_AYaa|D#U z>CV=iyn`H6JcD(wlxQjz{EZ$x&9+ZIA{Q7~PH$7mwl7P8rtGrc?v<9Cl5fY)?lso` MKTo#vTFn^X50WHD`Tzg` literal 352 zcmYLE!D_-l6r5~QU8InEDVU=L36dbiW3>l`c+o;Hf{3OXFhoply~IDrC*M=EE nwPtTqOQS8_Tei^D4!E$C)QY*P0;}s!0u4N12iNg2ykTC(f|?=gruqB1rP+&hJ*)bmp6b=iNFsITUm)j zBG)5Z4AV11vfRwcnfdO|+>`oKpHS9b?JN4DZm$I3N;wwL+#3tvm-aYX@>>T%R+cVLVu^Oro3aDjDAj9;KN?>6BSDG(+a=~nuUi)711 W0n2R;;0amh`Y!hx?O5t%E$|PT1~-)e delta 292 zcmX|+F%AJi6o&tqS!=TeYLU3Xl0ifzs6^`mTZo2EZ#PjYMzjtfaRH^yC6o?NIpW>2-9{YHE!-Cl-K=ml>DG%mvE7 zTx1gE{Y0cwGV;6O(*r~i`z>qM2=DIoCDu(YVZJ>mvd7JR`g79#CUWfVWi9Xl+k7$S 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 zcmX|6!D_-l6r7Ez1S#ZR3Jsq05>_p=IchEn_EH7CS!q)ZC>s(F9_`IzZeDZGPxvwU z4!5%k&N94t^WN@zi<;IK{fcnfA3Os%k)T&&FggB!oMBE{a3Ijc7qvk`nm)nG-WbG@ zv{0w_bngq*Mx`B;g53f(dBbSCTtz5L8;|tNxnUN?tMx8Jk}Y}*iI4a@RhjzTd9Ba3 zHylsK-ekS}iBd0A+a%sl1b$EYL03w@E8pG&zWKs69)JTk%#ChP3%FO!DLEXs7+lwP e*;6sE3eLCqn?oJCu)#$gQ#PudX`2826{#Y<`$L=t5;7 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;