From 5eccd108d5e8fc7e729843d2b0c40e4c2a1d017b Mon Sep 17 00:00:00 2001 From: TotallyNotElite <1yourexperiment@protonmail.com> Date: Thu, 13 Dec 2018 19:24:28 +0100 Subject: [PATCH] Try to fix glow and chams crashes --- include/visual/EffectChams.hpp | 17 ++++++++++++----- include/visual/EffectGlow.hpp | 21 ++++++++++++++------- src/visual/EffectChams.cpp | 5 +++++ src/visual/EffectGlow.cpp | 5 +++++ 4 files changed, 36 insertions(+), 12 deletions(-) diff --git a/include/visual/EffectChams.hpp b/include/visual/EffectChams.hpp index 474cbb67..7ce1a382 100644 --- a/include/visual/EffectChams.hpp +++ b/include/visual/EffectChams.hpp @@ -16,15 +16,22 @@ namespace effect_chams class EffectChams : public IScreenSpaceEffect { + std::vector chams_keyvalues; + public: virtual void Init(); inline virtual void Shutdown() { - mat_unlit.Shutdown(); - mat_unlit_z.Shutdown(); - mat_lit.Shutdown(); - mat_lit_z.Shutdown(); - init = false; + if (init) + { + mat_unlit.Shutdown(); + mat_unlit_z.Shutdown(); + mat_lit.Shutdown(); + mat_lit_z.Shutdown(); + for (auto kv : chams_keyvalues) + kv->deleteThis(); + init = false; + } } inline virtual void SetParameters(KeyValues *params) diff --git a/include/visual/EffectGlow.hpp b/include/visual/EffectGlow.hpp index 51268ee1..633abc9a 100644 --- a/include/visual/EffectGlow.hpp +++ b/include/visual/EffectGlow.hpp @@ -15,17 +15,24 @@ namespace effect_glow class EffectGlow : public IScreenSpaceEffect { + std::vector glow_keyvalues; + public: virtual void Init(); inline virtual void Shutdown() { - mat_unlit.Shutdown(); - mat_unlit_z.Shutdown(); - mat_blit.Shutdown(); - mat_unlit.Shutdown(); - mat_unlit_z.Shutdown(); - mat_blur_x.Shutdown(); - mat_blur_y.Shutdown(); + if (init) + { + mat_unlit.Shutdown(); + mat_unlit_z.Shutdown(); + mat_blit.Shutdown(); + mat_unlit.Shutdown(); + mat_unlit_z.Shutdown(); + mat_blur_x.Shutdown(); + mat_blur_y.Shutdown(); + for (auto kv : glow_keyvalues) + kv->deleteThis(); + } } inline virtual void SetParameters(KeyValues *params) diff --git a/src/visual/EffectChams.cpp b/src/visual/EffectChams.cpp index 614a029c..1652a11a 100644 --- a/src/visual/EffectChams.cpp +++ b/src/visual/EffectChams.cpp @@ -35,6 +35,7 @@ CatCommand fix_black_chams("fix_black_chams", "Fix Black Chams", []() { effect_chams::g_EffectChams.Shutdown(); effect_chams::g_EffectChams.Init(); }); + void EffectChams::Init() { logging::Info("Init EffectChams..."); @@ -43,12 +44,14 @@ void EffectChams::Init() kv->SetString("$basetexture", "vgui/white_additive"); kv->SetInt("$ignorez", 0); mat_unlit.Init("__cathook_echams_unlit", kv); + chams_keyvalues.push_back(kv); } { KeyValues *kv = new KeyValues("UnlitGeneric"); kv->SetString("$basetexture", "vgui/white_additive"); kv->SetInt("$ignorez", 1); mat_unlit_z.Init("__cathook_echams_unlit_z", kv); + chams_keyvalues.push_back(kv); } { KeyValues *kv = new KeyValues("VertexLitGeneric"); @@ -56,6 +59,7 @@ void EffectChams::Init() kv->SetInt("$ignorez", 0); kv->SetInt("$halflambert", 1); mat_lit.Init("__cathook_echams_lit", kv); + chams_keyvalues.push_back(kv); } { KeyValues *kv = new KeyValues("VertexLitGeneric"); @@ -63,6 +67,7 @@ void EffectChams::Init() kv->SetInt("$ignorez", 1); kv->SetInt("$halflambert", 1); mat_lit_z.Init("__cathook_echams_lit_z", kv); + chams_keyvalues.push_back(kv); } logging::Info("Init done!"); init = true; diff --git a/src/visual/EffectGlow.cpp b/src/visual/EffectGlow.cpp index 59c870b9..f4338ebd 100644 --- a/src/visual/EffectGlow.cpp +++ b/src/visual/EffectGlow.cpp @@ -135,12 +135,14 @@ void EffectGlow::Init() kv->SetString("$basetexture", "vgui/white_additive"); kv->SetInt("$ignorez", 0); mat_unlit.Init("__cathook_glow_unlit", kv); + glow_keyvalues.push_back(kv); } { KeyValues *kv = new KeyValues("UnlitGeneric"); kv->SetString("$basetexture", "vgui/white_additive"); kv->SetInt("$ignorez", 1); mat_unlit_z.Init("__cathook_glow_unlit_z", kv); + glow_keyvalues.push_back(kv); } // Initialize 2 buffers GetBuffer(1); @@ -151,6 +153,7 @@ void EffectGlow::Init() kv->SetInt("$additive", 1); mat_blit.Init("__cathook_glow_blit", TEXTURE_GROUP_CLIENT_EFFECTS, kv); mat_blit->Refresh(); + glow_keyvalues.push_back(kv); } { KeyValues *kv = new KeyValues("BlurFilterX"); @@ -160,6 +163,7 @@ void EffectGlow::Init() kv->SetInt("$alphatest", 1); mat_blur_x.Init("_cathook_blurx", kv); mat_blur_x->Refresh(); + glow_keyvalues.push_back(kv); } { KeyValues *kv = new KeyValues("BlurFilterY"); @@ -170,6 +174,7 @@ void EffectGlow::Init() kv->SetInt("$alphatest", 1); mat_blur_y.Init("_cathook_blury", kv); mat_blur_y->Refresh(); + glow_keyvalues.push_back(kv); } { SS_NeverSolid.m_bEnable = true;