Skip to content

Commit

Permalink
Added VMT Param EGSMShader
Browse files Browse the repository at this point in the history
  • Loading branch information
devonium committed Mar 14, 2024
1 parent 8c88971 commit da4167e
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 7 deletions.
23 changes: 19 additions & 4 deletions include_files/depthpass.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,30 @@ local BrushMaterialOverride = BrushMaterialOverride
local WorldMaterialOverride = WorldMaterialOverride
local ModelMaterialOverride = ModelMaterialOverride

local MatMaterialOverride
local MatBrushMaterialOverride
local MatWorldMaterialOverride
local MatModelMaterialOverride

function render.MaterialOverride(m)
MatMaterialOverride = m
if bDepthPass then return end
MaterialOverride(m)
end

function render.BrushMaterialOverride(m)
MatBrushMaterialOverride = m
if bDepthPass then return end
BrushMaterialOverride(m)
end

function render.WorldMaterialOverride(m)
MatWorldMaterialOverride = m
if bDepthPass then return end
WorldMaterialOverride(m)
end
function render.ModelMaterialOverride(m)
MatModelMaterialOverride = m
if bDepthPass then return end
ModelMaterialOverride(m)
end
Expand Down Expand Up @@ -71,10 +80,10 @@ local function PreDrawEffectsHK()
RenderView()
EndDepthPass()

MaterialOverride()
BrushMaterialOverride()
WorldMaterialOverride()
ModelMaterialOverride()
MaterialOverride(MatMaterialOverride)
BrushMaterialOverride(MatBrushMaterialOverride)
WorldMaterialOverride(MatWorldMaterialOverride)
ModelMaterialOverride(MatModelMaterialOverride)

halo.Render = hRender
bDepthPass = false
Expand All @@ -93,6 +102,12 @@ function shaderlib.__INIT()
halo = halo
hRender = halo.Render

hook.Add("PreRender", "!!!EGSM_ImTooLazy", function()
MatMaterialOverride = nil
MatBrushMaterialOverride = nil
MatWorldMaterialOverride = nil
MatModelMaterialOverride = nil
end)
hook.Add("PreDrawViewModel", "!!!EGSM_ImTooLazy", function() if bDepthPass then rClearDepth() end end)
hook.Add("NeedsDepthPass", "!!!EGSM_ImTooLazy", PreDrawEffectsHK)

Expand Down
1 change: 0 additions & 1 deletion premake5.lua
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ include("prepare_files_for_include.lua")
include(gmcommon)



function CreateProject(config)
assert(type(config) == "table", "supplied argument is not a table!")

Expand Down
2 changes: 1 addition & 1 deletion source/depthpass.lua.inc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
const char depthpass_lua[] = "local depthWriteMat = CreateMaterial( \"egsm/depthmat\", \"DepthWrite\", {\n"" [\"$no_fullbright\"] = \"1\",\n"" [\"$color_depth\"] = \"1\",\n"" [\"$alpha_test\"] = \"0\",\n""} )\n""local fixResolvedfullframedepthMat\n""\n""local bDepthPass = false\n""local halo = {}\n""local render = render\n""\n""MaterialOverride = MaterialOverride or render.MaterialOverride\n""BrushMaterialOverride = BrushMaterialOverride or render.BrushMaterialOverride \n""WorldMaterialOverride = WorldMaterialOverride or render.WorldMaterialOverride \n""ModelMaterialOverride = ModelMaterialOverride or render.ModelMaterialOverride \n""\n""local MaterialOverride = MaterialOverride\n""local BrushMaterialOverride = BrushMaterialOverride\n""local WorldMaterialOverride = WorldMaterialOverride\n""local ModelMaterialOverride = ModelMaterialOverride\n""\n""function render.MaterialOverride(m)\n"" if bDepthPass then return end\n"" MaterialOverride(m)\n""end\n""\n""function render.BrushMaterialOverride(m)\n"" if bDepthPass then return end\n"" BrushMaterialOverride(m)\n""end\n""\n""function render.WorldMaterialOverride(m)\n"" if bDepthPass then return end\n"" WorldMaterialOverride(m)\n""end\n""function render.ModelMaterialOverride(m)\n"" if bDepthPass then return end\n"" ModelMaterialOverride(m)\n""end\n""\n""local function dummyFn() end\n""\n""local PushRenderTarget = render.PushRenderTarget\n""local PopRenderTarget = render.PopRenderTarget\n""local rClear = render.Clear\n""local depthRT = render.GetResolvedFullFrameDepth()\n""local hRender = dummyFn\n""local BeginDepthPass = shaderlib.BeginDepthPass\n""local EndDepthPass = shaderlib.EndDepthPass\n""local RenderView = render.RenderView\n""local rClearDepth = render.ClearDepth\n""local resolvedDepthRT = render.GetResolvedFullFrameDepth()\n""local function PreDrawEffectsHK() \n"" if bDepthPass then return end\n"" bDepthPass = true\n"" \n"" halo.Render = dummyFn\n"" \n"" MaterialOverride( depthWriteMat )\n"" BrushMaterialOverride( depthWriteMat )\n"" WorldMaterialOverride( depthWriteMat )\n"" ModelMaterialOverride( depthWriteMat )\n"" \n"" BeginDepthPass()\n"" rClear(0,0,0,0) \n"" \n"" rClear(0,0,0,0)\n"" \n"" rClear(0,0,0,0) \n""\n"" RenderView()\n"" EndDepthPass()\n""\n"" MaterialOverride()\n"" BrushMaterialOverride()\n"" WorldMaterialOverride()\n"" ModelMaterialOverride()\n"" \n"" halo.Render = hRender\n"" bDepthPass = false\n"" \n"" render.PushRenderTarget(resolvedDepthRT)\n"" render.Clear(0,0,0,0, true, true)\n"" render.SetMaterial(fixResolvedfullframedepthMat)\n"" render.DrawScreenQuad()\n"" render.PopRenderTarget()\n""end\n""\n""local zero_vec = Vector(0,0,0)\n""local min,max = zero_vec, zero_vec\n""\n""function shaderlib.__INIT()\n"" halo = halo\n"" hRender = halo.Render\n"" \n"" hook.Add(\"PreDrawViewModel\", \"!!!EGSM_ImTooLazy\", function() if bDepthPass then rClearDepth() end end) \n"" hook.Add(\"NeedsDepthPass\", \"!!!EGSM_ImTooLazy\", PreDrawEffectsHK)\n"" \n"" hook.Add(\"PostDraw2DSkyBox\", \"!!!EGSM_ImTooLazy\", function()\n"" local rt = render.GetRenderTarget()\n"" if !rt or rt:GetName() != \"egsm_skyboxrt\" \n"" then \n"" return\n"" end\n"" cam.Start3D( zero_vec, EyeAngles() )\n"" min,max = game.GetWorld():GetModelBounds()\n"" \n"" render.SetMaterial( depthWriteMat )\n"" \n"" render.DrawBox( zero_vec, angle_zero, max, min, color_white )\n"" cam.End3D()\n"" end)\n"" \n"" \n"" shaderlib.CompileVertexShader(\"FixResolvedfullframedepthVS\", 0, [==[\n"" #include \"common_vs_fxc.h\"\n"" struct VS_INPUT\n"" {\n"" float4 vPos : POSITION;\n"" float4 vTexCoord : TEXCOORD0;\n"" };\n""\n"" struct VS_OUTPUT\n"" {\n"" float4 projPosSetup : POSITION;\n"" float4 vTexCoord : TEXCOORD0;\n"" };\n""\n"" VS_OUTPUT main( const VS_INPUT v )\n"" {\n"" VS_OUTPUT o = (VS_OUTPUT)0;\n"" o.projPosSetup = mul( v.vPos, cViewProj );\n"" o.vTexCoord = v.vTexCoord;\n"" return o;\n"" }\n"" ]==]) \n""\n"" shaderlib.CompilePixelShader(\"FixResolvedfullframedepthPS\", 0, [==[\n"" sampler WDBuffer : register(s0);\n""\n"" struct PS_IN\n"" {\n"" float2 vTexCoord : TEXCOORD0;\n"" };\n""\n"" float4 main(PS_IN i ) : COLOR\n"" {\n"" return float4((1/tex2D(WDBuffer, i.vTexCoord).w)/4000,0,0,1);\n"" }; \n"" ]==])\n""\n""\n"" local shader = shaderlib.NewShader(\"FixResolvedfullframedepth\")\n"" \n"" shader:SetPixelShader(\"FixResolvedfullframedepthPS\")\n"" shader:SetVertexShader(\"FixResolvedfullframedepthVS\")\n""\n"" shader:SetParamDefValue(PARAM_BASETEXTURE, \"_rt_WPNDepth\")\n"" shader:BindTexture(0, PARAM_BASETEXTURE)\n""\n"" fixResolvedfullframedepthMat = CreateMaterial(\"EGSMFixResolvedfullframedepth\", \"FixResolvedfullframedepth\", {} )\n""end\n";
const char depthpass_lua[] = "local depthWriteMat = CreateMaterial( \"egsm/depthmat\", \"DepthWrite\", {\n"" [\"$no_fullbright\"] = \"1\",\n"" [\"$color_depth\"] = \"1\",\n"" [\"$alpha_test\"] = \"0\",\n""} )\n""local fixResolvedfullframedepthMat\n""\n""local bDepthPass = false\n""local halo = {}\n""local render = render\n""\n""MaterialOverride = MaterialOverride or render.MaterialOverride\n""BrushMaterialOverride = BrushMaterialOverride or render.BrushMaterialOverride \n""WorldMaterialOverride = WorldMaterialOverride or render.WorldMaterialOverride \n""ModelMaterialOverride = ModelMaterialOverride or render.ModelMaterialOverride \n""\n""local MaterialOverride = MaterialOverride\n""local BrushMaterialOverride = BrushMaterialOverride\n""local WorldMaterialOverride = WorldMaterialOverride\n""local ModelMaterialOverride = ModelMaterialOverride\n""\n""local MatMaterialOverride \n""local MatBrushMaterialOverride\n""local MatWorldMaterialOverride\n""local MatModelMaterialOverride\n""\n""function render.MaterialOverride(m)\n"" MatMaterialOverride = m\n"" if bDepthPass then return end\n"" MaterialOverride(m)\n""end\n""\n""function render.BrushMaterialOverride(m)\n"" MatBrushMaterialOverride = m\n"" if bDepthPass then return end\n"" BrushMaterialOverride(m)\n""end\n""\n""function render.WorldMaterialOverride(m)\n"" MatWorldMaterialOverride = m\n"" if bDepthPass then return end\n"" WorldMaterialOverride(m)\n""end\n""function render.ModelMaterialOverride(m)\n"" MatModelMaterialOverride = m\n"" if bDepthPass then return end\n"" ModelMaterialOverride(m)\n""end\n""\n""local function dummyFn() end\n""\n""local PushRenderTarget = render.PushRenderTarget\n""local PopRenderTarget = render.PopRenderTarget\n""local rClear = render.Clear\n""local depthRT = render.GetResolvedFullFrameDepth()\n""local hRender = dummyFn\n""local BeginDepthPass = shaderlib.BeginDepthPass\n""local EndDepthPass = shaderlib.EndDepthPass\n""local RenderView = render.RenderView\n""local rClearDepth = render.ClearDepth\n""local resolvedDepthRT = render.GetResolvedFullFrameDepth()\n""local function PreDrawEffectsHK() \n"" if bDepthPass then return end\n"" bDepthPass = true\n"" \n"" halo.Render = dummyFn\n"" \n"" MaterialOverride( depthWriteMat )\n"" BrushMaterialOverride( depthWriteMat )\n"" WorldMaterialOverride( depthWriteMat )\n"" ModelMaterialOverride( depthWriteMat )\n"" \n"" BeginDepthPass()\n"" rClear(0,0,0,0) \n"" \n"" rClear(0,0,0,0)\n"" \n"" rClear(0,0,0,0) \n""\n"" RenderView()\n"" EndDepthPass()\n""\n"" MaterialOverride(MatMaterialOverride)\n"" BrushMaterialOverride(MatBrushMaterialOverride)\n"" WorldMaterialOverride(MatWorldMaterialOverride)\n"" ModelMaterialOverride(MatModelMaterialOverride)\n"" \n"" halo.Render = hRender\n"" bDepthPass = false\n"" \n"" render.PushRenderTarget(resolvedDepthRT)\n"" render.Clear(0,0,0,0, true, true)\n"" render.SetMaterial(fixResolvedfullframedepthMat)\n"" render.DrawScreenQuad()\n"" render.PopRenderTarget()\n""end\n""\n""local zero_vec = Vector(0,0,0)\n""local min,max = zero_vec, zero_vec\n""\n""function shaderlib.__INIT()\n"" halo = halo\n"" hRender = halo.Render\n"" \n"" hook.Add(\"PreRender\", \"!!!EGSM_ImTooLazy\", function() \n"" MatMaterialOverride = nil\n"" MatBrushMaterialOverride = nil\n"" MatWorldMaterialOverride = nil\n"" MatModelMaterialOverride = nil\n"" end) \n"" hook.Add(\"PreDrawViewModel\", \"!!!EGSM_ImTooLazy\", function() if bDepthPass then rClearDepth() end end) \n"" hook.Add(\"NeedsDepthPass\", \"!!!EGSM_ImTooLazy\", PreDrawEffectsHK)\n"" \n"" hook.Add(\"PostDraw2DSkyBox\", \"!!!EGSM_ImTooLazy\", function()\n"" local rt = render.GetRenderTarget()\n"" if !rt or rt:GetName() != \"egsm_skyboxrt\" \n"" then \n"" return\n"" end\n"" cam.Start3D( zero_vec, EyeAngles() )\n"" min,max = game.GetWorld():GetModelBounds()\n"" \n"" render.SetMaterial( depthWriteMat )\n"" \n"" render.DrawBox( zero_vec, angle_zero, max, min, color_white )\n"" cam.End3D()\n"" end)\n"" \n"" \n"" shaderlib.CompileVertexShader(\"FixResolvedfullframedepthVS\", 0, [==[\n"" #include \"common_vs_fxc.h\"\n"" struct VS_INPUT\n"" {\n"" float4 vPos : POSITION;\n"" float4 vTexCoord : TEXCOORD0;\n"" };\n""\n"" struct VS_OUTPUT\n"" {\n"" float4 projPosSetup : POSITION;\n"" float4 vTexCoord : TEXCOORD0;\n"" };\n""\n"" VS_OUTPUT main( const VS_INPUT v )\n"" {\n"" VS_OUTPUT o = (VS_OUTPUT)0;\n"" o.projPosSetup = mul( v.vPos, cViewProj );\n"" o.vTexCoord = v.vTexCoord;\n"" return o;\n"" }\n"" ]==]) \n""\n"" shaderlib.CompilePixelShader(\"FixResolvedfullframedepthPS\", 0, [==[\n"" sampler WDBuffer : register(s0);\n""\n"" struct PS_IN\n"" {\n"" float2 vTexCoord : TEXCOORD0;\n"" };\n""\n"" float4 main(PS_IN i ) : COLOR\n"" {\n"" return float4((1/tex2D(WDBuffer, i.vTexCoord).w)/4000,0,0,1);\n"" }; \n"" ]==])\n""\n""\n"" local shader = shaderlib.NewShader(\"FixResolvedfullframedepth\")\n"" \n"" shader:SetPixelShader(\"FixResolvedfullframedepthPS\")\n"" shader:SetVertexShader(\"FixResolvedfullframedepthVS\")\n""\n"" shader:SetParamDefValue(PARAM_BASETEXTURE, \"_rt_WPNDepth\")\n"" shader:BindTexture(0, PARAM_BASETEXTURE)\n""\n"" fixResolvedfullframedepthMat = CreateMaterial(\"EGSMFixResolvedfullframedepth\", \"FixResolvedfullframedepth\", {} )\n""end\n";
39 changes: 38 additions & 1 deletion source/shaderlib.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1182,8 +1182,36 @@ namespace ShaderLib
// return;
//}

Define_method_Hook(KeyValues*, CMaterial_InitializeShader, void*, KeyValues& keyValues, KeyValues& patchKeyValues, int nFindContext)
{
auto v = keyValues.FindKey("EGSMShader");


if (v)
{
if (v->GetDataType() == v->TYPE_STRING)
{
auto name = keyValues.GetName();
keyValues.SetName(v->GetString());
auto ret = CMaterial_InitializeShader_trampoline()(_this, keyValues, patchKeyValues, nFindContext);
keyValues.SetName(name);
return ret;
}
else if (v->GetDataType() == v->TYPE_NONE)
{
auto sname = v->FindKey("Shader");
if (sname)
{
auto name = v->GetName();
v->SetName(sname->GetString());
auto ret = CMaterial_InitializeShader_trampoline()(_this, *v, patchKeyValues, nFindContext);
v->SetName(name);
return ret;
}
}
}

return CMaterial_InitializeShader_trampoline()(_this, keyValues, patchKeyValues, nFindContext);
}

Define_method_Hook(void, CSkyboxView_Draw, CSkyboxView*)
{
Expand Down Expand Up @@ -1382,6 +1410,15 @@ namespace ShaderLib
Setup_Hook(CMatRenderContextBase_Bind, Bind);
}

{
static const char sign[] =
HOOK_SIGN_CHROMIUM_x32("55 8B EC 81 EC 28 07 00 00 53 56 8B F1 8B ? ? ? ? ? 57 89 75 F8 8B 01 FF 90 A8 01 00 00 8B 7D 08 33 DB 8B CF 89 45 E0 89 7D EC 89 5D E8 E8 ? ? ? ? 8B C8 85 C9 75 1C")
HOOK_SIGN_CHROMIUM_x64("40 53 55 56 57 41 54 41 56 41 57 48 81 EC 90 0B 00 00 48 8B ? ? ? ? ? 48 33 C4 48 89 84 24 70 0B 00 00 4C 8B F1 44 89 4C 24 44 48 8B ? ? ? ? ? 45 8B E1 4C 89 44 24 58 4C 8B FA 48 8B 01 FF 90 50 03 00 00 49 8B CF 4C 89 7C 24 48 48 89 44 24 50 33")
void* Bind = ScanSign(materialsystemdll, sign, sizeof(sign) - 1);
if (!Bind) { ShaderLibError("CMaterial::InitializeShader == NULL\n"); return 0; }
Setup_Hook(CMaterial_InitializeShader, Bind);
}

{
//static const char sign[] =
// HOOK_SIGN_CHROMIUM_x32("55 8B EC 56 8B F1 8B 4E 18 85 C9 74 46 8B 46 28 85 C0 74 0B 8B 00 85 C0 74 05 8B 40 08 EB 02 33 C0 A8 04 75 3C 8B 01 FF 10 8B 86 80 00 00 00 33 ? ? ? ? ? 8B")
Expand Down

0 comments on commit da4167e

Please sign in to comment.