improve stream safety
This commit is contained in:
parent
9cd64d810f
commit
7e1dde5067
@ -29,9 +29,10 @@ set(Game "tf2" CACHE STRING "Target game")
|
|||||||
set(GameValues "tf2;hl2dm;dab;tf2c;css;dynamic" CACHE INTERNAL "List of supported game types")
|
set(GameValues "tf2;hl2dm;dab;tf2c;css;dynamic" CACHE INTERNAL "List of supported game types")
|
||||||
set_property(CACHE Game PROPERTY STRINGS ${GameValues})
|
set_property(CACHE Game PROPERTY STRINGS ${GameValues})
|
||||||
|
|
||||||
set(DrawType "IMGUI" CACHE STRING "Target drawing api")
|
set(Visuals_DrawType "IMGUI" CACHE STRING "Target drawing api")
|
||||||
set(DrawTypes "No Visuals;Glez;Engine;IMGUI;IMGUI Streamproof" CACHE INTERNAL "Select the drawing api that cathook should use")
|
set(DrawTypes "No Visuals;Glez;Engine;IMGUI;IMGUI Streamproof" CACHE INTERNAL "Select the drawing api that cathook should use")
|
||||||
set_property(CACHE DrawType PROPERTY STRINGS ${DrawTypes})
|
set_property(CACHE Visuals_DrawType PROPERTY STRINGS ${DrawTypes})
|
||||||
|
set(Visuals_EnforceStreamSafety 1 CACHE BOOL "If a streamsafe drawing method is used, this will remove features that are not streamsafe.")
|
||||||
|
|
||||||
set(EnableVisuals 0)
|
set(EnableVisuals 0)
|
||||||
set(EnableGlezDrawing 0)
|
set(EnableGlezDrawing 0)
|
||||||
@ -39,19 +40,25 @@ set(EnableEngineDrawing 0)
|
|||||||
set(EnableImGuiDrawing 0)
|
set(EnableImGuiDrawing 0)
|
||||||
set(ExternalDrawing 0)
|
set(ExternalDrawing 0)
|
||||||
|
|
||||||
if(NOT DrawType STREQUAL "No Visuals")
|
if(NOT Visuals_DrawType STREQUAL "No Visuals")
|
||||||
set(EnableVisuals 1)
|
set(EnableVisuals 1)
|
||||||
endif()
|
endif()
|
||||||
if(DrawType STREQUAL "Glez")
|
if(Visuals_DrawType STREQUAL "Glez")
|
||||||
set(EnableGlezDrawing 1)
|
set(EnableGlezDrawing 1)
|
||||||
elseif(DrawType STREQUAL "Engine")
|
elseif(Visuals_DrawType STREQUAL "Engine")
|
||||||
set(EnableEngineDrawing 1)
|
set(EnableEngineDrawing 1)
|
||||||
elseif(DrawType STREQUAL "IMGUI")
|
elseif(Visuals_DrawType STREQUAL "IMGUI")
|
||||||
set(EnableImGuiDrawing 1)
|
set(EnableImGuiDrawing 1)
|
||||||
elseif(DrawType STREQUAL "IMGUI Streamproof")
|
elseif(Visuals_DrawType STREQUAL "IMGUI Streamproof")
|
||||||
set(EnableImGuiDrawing 1)
|
set(EnableImGuiDrawing 1)
|
||||||
set(ExternalDrawing 1)
|
set(ExternalDrawing 1)
|
||||||
endif()
|
endif()
|
||||||
|
if (NOT ExternalDrawing)
|
||||||
|
set(Visuals_ForceStreamSafety 0)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(${Visuals_ForceStreamSafety})
|
||||||
|
|
||||||
|
|
||||||
set(EnableUnityBuilds 1 CACHE BOOL "Enable Profiler")
|
set(EnableUnityBuilds 1 CACHE BOOL "Enable Profiler")
|
||||||
set(EnableProfiler 0 CACHE BOOL "Enable Profiler")
|
set(EnableProfiler 0 CACHE BOOL "Enable Profiler")
|
||||||
|
@ -22,3 +22,4 @@
|
|||||||
#define ENABLE_ENGINE_DRAWING @EnableEngineDrawing@
|
#define ENABLE_ENGINE_DRAWING @EnableEngineDrawing@
|
||||||
#define ENABLE_IMGUI_DRAWING @EnableImGuiDrawing@
|
#define ENABLE_IMGUI_DRAWING @EnableImGuiDrawing@
|
||||||
#define EXTERNAL_DRAWING @ExternalDrawing@
|
#define EXTERNAL_DRAWING @ExternalDrawing@
|
||||||
|
#define ENFORCE_STREAM_SAFETY @Visuals_EnforceStreamSafety@
|
||||||
|
@ -33,6 +33,7 @@ static ChIRC::ChIRC irc;
|
|||||||
|
|
||||||
void printmsg(std::string &usr, std::string &msg)
|
void printmsg(std::string &usr, std::string &msg)
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
if (msg.size() > 256 || usr.size() > 256)
|
if (msg.size() > 256 || usr.size() > 256)
|
||||||
{
|
{
|
||||||
logging::Info("IRC: Message too large.");
|
logging::Info("IRC: Message too large.");
|
||||||
@ -42,6 +43,7 @@ void printmsg(std::string &usr, std::string &msg)
|
|||||||
logging::Info("[IRC] %s: %s", usr.c_str(), msg.c_str());
|
logging::Info("[IRC] %s: %s", usr.c_str(), msg.c_str());
|
||||||
else
|
else
|
||||||
PrintChat("\x07%06X[IRC] %s\x01: %s", 0xe05938, usr.c_str(), msg.c_str());
|
PrintChat("\x07%06X[IRC] %s\x01: %s", 0xe05938, usr.c_str(), msg.c_str());
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
void printmsgcopy(std::string usr, std::string msg)
|
void printmsgcopy(std::string usr, std::string msg)
|
||||||
{
|
{
|
||||||
|
@ -38,6 +38,7 @@ CatCommand fix_black_chams("fix_black_chams", "Fix Black Chams", []() {
|
|||||||
|
|
||||||
void EffectChams::Init()
|
void EffectChams::Init()
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
if (init)
|
if (init)
|
||||||
return;
|
return;
|
||||||
logging::Info("Init EffectChams...");
|
logging::Info("Init EffectChams...");
|
||||||
@ -69,20 +70,25 @@ void EffectChams::Init()
|
|||||||
}
|
}
|
||||||
logging::Info("Init done!");
|
logging::Info("Init done!");
|
||||||
init = true;
|
init = true;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void EffectChams::BeginRenderChams()
|
void EffectChams::BeginRenderChams()
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
drawing = true;
|
drawing = true;
|
||||||
CMatRenderContextPtr ptr(GET_RENDER_CONTEXT);
|
CMatRenderContextPtr ptr(GET_RENDER_CONTEXT);
|
||||||
g_IVRenderView->SetBlend(1.0f);
|
g_IVRenderView->SetBlend(1.0f);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void EffectChams::EndRenderChams()
|
void EffectChams::EndRenderChams()
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
drawing = false;
|
drawing = false;
|
||||||
CMatRenderContextPtr ptr(GET_RENDER_CONTEXT);
|
CMatRenderContextPtr ptr(GET_RENDER_CONTEXT);
|
||||||
g_IVModelRender->ForcedMaterialOverride(nullptr);
|
g_IVModelRender->ForcedMaterialOverride(nullptr);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
static rgba_t data[33] = { colors::empty };
|
static rgba_t data[33] = { colors::empty };
|
||||||
void EffectChams::SetEntityColor(CachedEntity *ent, rgba_t color)
|
void EffectChams::SetEntityColor(CachedEntity *ent, rgba_t color)
|
||||||
@ -203,6 +209,9 @@ rgba_t EffectChams::ChamsColor(IClientEntity *entity)
|
|||||||
|
|
||||||
bool EffectChams::ShouldRenderChams(IClientEntity *entity)
|
bool EffectChams::ShouldRenderChams(IClientEntity *entity)
|
||||||
{
|
{
|
||||||
|
#if ENFORCE_STREAM_SAFETY
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
if (!isHackActive() || !*effect_chams::enable || CE_BAD(LOCAL_E))
|
if (!isHackActive() || !*effect_chams::enable || CE_BAD(LOCAL_E))
|
||||||
return false;
|
return false;
|
||||||
if (entity->entindex() < 0)
|
if (entity->entindex() < 0)
|
||||||
@ -262,6 +271,7 @@ bool EffectChams::ShouldRenderChams(IClientEntity *entity)
|
|||||||
|
|
||||||
void EffectChams::RenderChamsRecursive(IClientEntity *entity)
|
void EffectChams::RenderChamsRecursive(IClientEntity *entity)
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
if (!isHackActive() || !*effect_chams::enable)
|
if (!isHackActive() || !*effect_chams::enable)
|
||||||
return;
|
return;
|
||||||
entity->DrawModel(1);
|
entity->DrawModel(1);
|
||||||
@ -297,10 +307,12 @@ void EffectChams::RenderChamsRecursive(IClientEntity *entity)
|
|||||||
}
|
}
|
||||||
attach = g_IEntityList->GetClientEntity(*(int *) ((uintptr_t) attach + netvar.m_Collision - 20) & 0xFFF);
|
attach = g_IEntityList->GetClientEntity(*(int *) ((uintptr_t) attach + netvar.m_Collision - 20) & 0xFFF);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void EffectChams::RenderChams(IClientEntity *entity)
|
void EffectChams::RenderChams(IClientEntity *entity)
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
if (!isHackActive() || !*effect_chams::enable)
|
if (!isHackActive() || !*effect_chams::enable)
|
||||||
return;
|
return;
|
||||||
CMatRenderContextPtr ptr(GET_RENDER_CONTEXT);
|
CMatRenderContextPtr ptr(GET_RENDER_CONTEXT);
|
||||||
@ -326,9 +338,11 @@ void EffectChams::RenderChams(IClientEntity *entity)
|
|||||||
RenderChamsRecursive(entity);
|
RenderChamsRecursive(entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
void EffectChams::Render(int x, int y, int w, int h)
|
void EffectChams::Render(int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
PROF_SECTION(DRAW_chams);
|
PROF_SECTION(DRAW_chams);
|
||||||
if (!isHackActive())
|
if (!isHackActive())
|
||||||
return;
|
return;
|
||||||
@ -350,6 +364,7 @@ void EffectChams::Render(int x, int y, int w, int h)
|
|||||||
RenderChams(entity);
|
RenderChams(entity);
|
||||||
}
|
}
|
||||||
EndRenderChams();
|
EndRenderChams();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
EffectChams g_EffectChams;
|
EffectChams g_EffectChams;
|
||||||
CScreenSpaceEffectRegistration *g_pEffectChams = nullptr;
|
CScreenSpaceEffectRegistration *g_pEffectChams = nullptr;
|
||||||
|
@ -129,6 +129,7 @@ CatCommand fix_black_glow("fix_black_glow", "Fix Black Glow", []() {
|
|||||||
|
|
||||||
void EffectGlow::Init()
|
void EffectGlow::Init()
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
if (init)
|
if (init)
|
||||||
return;
|
return;
|
||||||
logging::Info("Init Glow...");
|
logging::Info("Init Glow...");
|
||||||
@ -202,6 +203,7 @@ void EffectGlow::Init()
|
|||||||
|
|
||||||
logging::Info("Init done!");
|
logging::Info("Init done!");
|
||||||
init = true;
|
init = true;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void EffectGlow::Shutdown()
|
void EffectGlow::Shutdown()
|
||||||
@ -262,6 +264,9 @@ rgba_t EffectGlow::GlowColor(IClientEntity *entity)
|
|||||||
|
|
||||||
bool EffectGlow::ShouldRenderGlow(IClientEntity *entity)
|
bool EffectGlow::ShouldRenderGlow(IClientEntity *entity)
|
||||||
{
|
{
|
||||||
|
#if ENFORCE_STREAM_SAFETY
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
static CachedEntity *ent;
|
static CachedEntity *ent;
|
||||||
if (entity->entindex() < 0)
|
if (entity->entindex() < 0)
|
||||||
return false;
|
return false;
|
||||||
@ -316,6 +321,7 @@ bool EffectGlow::ShouldRenderGlow(IClientEntity *entity)
|
|||||||
|
|
||||||
void EffectGlow::BeginRenderGlow()
|
void EffectGlow::BeginRenderGlow()
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
drawing = true;
|
drawing = true;
|
||||||
CMatRenderContextPtr ptr(GET_RENDER_CONTEXT);
|
CMatRenderContextPtr ptr(GET_RENDER_CONTEXT);
|
||||||
ptr->ClearColor4ub(0, 0, 0, 0);
|
ptr->ClearColor4ub(0, 0, 0, 0);
|
||||||
@ -326,19 +332,23 @@ void EffectGlow::BeginRenderGlow()
|
|||||||
ptr->ClearBuffers(true, false);
|
ptr->ClearBuffers(true, false);
|
||||||
mat_unlit_z->AlphaModulate(1.0f);
|
mat_unlit_z->AlphaModulate(1.0f);
|
||||||
ptr->DepthRange(0.0f, 0.01f);
|
ptr->DepthRange(0.0f, 0.01f);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void EffectGlow::EndRenderGlow()
|
void EffectGlow::EndRenderGlow()
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
drawing = false;
|
drawing = false;
|
||||||
CMatRenderContextPtr ptr(GET_RENDER_CONTEXT);
|
CMatRenderContextPtr ptr(GET_RENDER_CONTEXT);
|
||||||
ptr->DepthRange(0.0f, 1.0f);
|
ptr->DepthRange(0.0f, 1.0f);
|
||||||
g_IVModelRender->ForcedMaterialOverride(nullptr);
|
g_IVModelRender->ForcedMaterialOverride(nullptr);
|
||||||
ptr->PopRenderTargetAndViewport();
|
ptr->PopRenderTargetAndViewport();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void EffectGlow::StartStenciling()
|
void EffectGlow::StartStenciling()
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
static ShaderStencilState_t state;
|
static ShaderStencilState_t state;
|
||||||
state.Reset();
|
state.Reset();
|
||||||
state.m_bEnable = true;
|
state.m_bEnable = true;
|
||||||
@ -366,10 +376,12 @@ void EffectGlow::StartStenciling()
|
|||||||
g_IVRenderView->SetBlend(0.0f);
|
g_IVRenderView->SetBlend(0.0f);
|
||||||
mat_unlit->AlphaModulate(1.0f);
|
mat_unlit->AlphaModulate(1.0f);
|
||||||
g_IVModelRender->ForcedMaterialOverride(*solid_when ? mat_unlit : mat_unlit_z);
|
g_IVModelRender->ForcedMaterialOverride(*solid_when ? mat_unlit : mat_unlit_z);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void EffectGlow::EndStenciling()
|
void EffectGlow::EndStenciling()
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
static ShaderStencilState_t state;
|
static ShaderStencilState_t state;
|
||||||
state.Reset();
|
state.Reset();
|
||||||
g_IVModelRender->ForcedMaterialOverride(nullptr);
|
g_IVModelRender->ForcedMaterialOverride(nullptr);
|
||||||
@ -377,11 +389,14 @@ void EffectGlow::EndStenciling()
|
|||||||
state.SetStencilState(ptr);
|
state.SetStencilState(ptr);
|
||||||
ptr->DepthRange(0.0f, 1.0f);
|
ptr->DepthRange(0.0f, 1.0f);
|
||||||
g_IVRenderView->SetBlend(1.0f);
|
g_IVRenderView->SetBlend(1.0f);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void EffectGlow::DrawToStencil(IClientEntity *entity)
|
void EffectGlow::DrawToStencil(IClientEntity *entity)
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
DrawEntity(entity);
|
DrawEntity(entity);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void EffectGlow::DrawToBuffer(IClientEntity *entity)
|
void EffectGlow::DrawToBuffer(IClientEntity *entity)
|
||||||
@ -390,6 +405,7 @@ void EffectGlow::DrawToBuffer(IClientEntity *entity)
|
|||||||
|
|
||||||
void EffectGlow::DrawEntity(IClientEntity *entity)
|
void EffectGlow::DrawEntity(IClientEntity *entity)
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
static IClientEntity *attach;
|
static IClientEntity *attach;
|
||||||
static int passes;
|
static int passes;
|
||||||
passes = 0;
|
passes = 0;
|
||||||
@ -415,18 +431,22 @@ void EffectGlow::DrawEntity(IClientEntity *entity)
|
|||||||
}
|
}
|
||||||
attach = g_IEntityList->GetClientEntity(*(int *) ((uintptr_t) attach + netvar.m_Collision - 20) & 0xFFF);
|
attach = g_IEntityList->GetClientEntity(*(int *) ((uintptr_t) attach + netvar.m_Collision - 20) & 0xFFF);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void EffectGlow::RenderGlow(IClientEntity *entity)
|
void EffectGlow::RenderGlow(IClientEntity *entity)
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
CMatRenderContextPtr ptr(GET_RENDER_CONTEXT);
|
CMatRenderContextPtr ptr(GET_RENDER_CONTEXT);
|
||||||
g_IVRenderView->SetColorModulation(GlowColor(entity));
|
g_IVRenderView->SetColorModulation(GlowColor(entity));
|
||||||
g_IVModelRender->ForcedMaterialOverride(mat_unlit_z);
|
g_IVModelRender->ForcedMaterialOverride(mat_unlit_z);
|
||||||
DrawEntity(entity);
|
DrawEntity(entity);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void EffectGlow::Render(int x, int y, int w, int h)
|
void EffectGlow::Render(int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
|
#if !ENFORCE_STREAM_SAFETY
|
||||||
if (!enable)
|
if (!enable)
|
||||||
return;
|
return;
|
||||||
if (!isHackActive() || (clean_screenshots && g_IEngine->IsTakingScreenshot()) || g_Settings.bInvalid)
|
if (!isHackActive() || (clean_screenshots && g_IEngine->IsTakingScreenshot()) || g_Settings.bInvalid)
|
||||||
@ -482,6 +502,7 @@ void EffectGlow::Render(int x, int y, int w, int h)
|
|||||||
{
|
{
|
||||||
SS_Null.SetStencilState(ptr);
|
SS_Null.SetStencilState(ptr);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
EffectGlow g_EffectGlow;
|
EffectGlow g_EffectGlow;
|
||||||
|
Reference in New Issue
Block a user