Improve Textmode Ressource usage and cat_save/load

This commit is contained in:
BenCat07 2019-05-15 18:14:20 +02:00
parent 2209707f70
commit 074b394908
6 changed files with 78 additions and 28 deletions

View File

@ -62,8 +62,6 @@ DECLARE_HOOKED_METHOD(IsPlayingTimeDemo, bool);
// ClientMode // ClientMode
DECLARE_HOOKED_METHOD(OverrideView, void, void *, CViewSetup *); DECLARE_HOOKED_METHOD(OverrideView, void, void *, CViewSetup *);
// g_IEngine // g_IEngine
// IVModelRender
DECLARE_HOOKED_METHOD(DrawModelExecute, void, IVModelRender *, const DrawModelState_t &, const ModelRenderInfo_t &, matrix3x4_t *);
// IStudioRender // IStudioRender
DECLARE_HOOKED_METHOD(BeginFrame, void, IStudioRender *); DECLARE_HOOKED_METHOD(BeginFrame, void, IStudioRender *);
// IBaseClient // IBaseClient
@ -79,6 +77,7 @@ DECLARE_HOOKED_METHOD(SDL_SetClipboardText, int, const char *);
// IUniformRandomStream // IUniformRandomStream
DECLARE_HOOKED_METHOD(RandomInt, int, IUniformRandomStream *, int, int); DECLARE_HOOKED_METHOD(RandomInt, int, IUniformRandomStream *, int, int);
#endif #endif
DECLARE_HOOKED_METHOD(DrawModelExecute, void, IVModelRender *, const DrawModelState_t &, const ModelRenderInfo_t &, matrix3x4_t *);
} // namespace hooked_methods } // namespace hooked_methods
// TODO // TODO

View File

@ -22,3 +22,6 @@ target_sources(cathook PRIVATE
if(EnableVisuals) if(EnableVisuals)
add_subdirectory(visual) add_subdirectory(visual)
endif() endif()
if(NOT EnableVisuals)
add_subdirectory(textmode)
endif()

View File

@ -7,29 +7,68 @@
#include "common.hpp" #include "common.hpp"
/*// 81 typedef ITexture *(*FindTexture_t)(void *, const char *, const char *, bool, int);
ITexture *FindTexture_null_hook(void* this_, char const* pTextureName, const typedef IMaterial *(*FindMaterialEx_t)(void *, const char *, const char *, int, bool, const char *);
char *pTextureGroupName, bool complain, int nAdditionalCreationFlags) { static typedef IMaterial *(*FindMaterial_t)(void *, const char *, const char *, bool, const char *);
ITexture *st = ((FindTexture_t)hooks::materialsystem.GetMethod(81))(this_, // 81
pTextureName, pTextureGroupName, complain, nAdditionalCreationFlags); return st; FindTexture_t FindTexture_Original;
FindMaterialEx_t FindMaterialEx_Original;
FindMaterial_t FindMaterial_Original;
ITexture *FindTexture_null_hook(void *this_, char const *pTextureName, const char *pTextureGroupName, bool complain, int nAdditionalCreationFlags)
{
static ITexture *st = FindTexture_Original(this_, pTextureName, pTextureGroupName, complain, nAdditionalCreationFlags);
return st;
} }
// 123 // 123
IMaterial *FindMaterialEx_null_hook(void* this_, char const* pMaterialName, IMaterial *FindMaterialEx_null_hook(void *this_, char const *pMaterialName, const char *pTextureGroupName, int nContext, bool complain, const char *pComplainPrefix)
const char *pTextureGroupName, int nContext, bool complain, const char {
*pComplainPrefix) { static IMaterial *st = static IMaterial *st = FindMaterialEx_Original(this_, pMaterialName, pTextureGroupName, nContext, complain, pComplainPrefix);
((FindMaterialEx_t)hooks::materialsystem.GetMethod(123))(this_, pMaterialName, return st;
pTextureGroupName, nContext, complain, pComplainPrefix); return st;
} }
// 73 // 73
IMaterial *FindMaterial_null_hook(void* this_, char const* pMaterialName, const IMaterial *FindMaterial_null_hook(void *this_, char const *pMaterialName, const char *pTextureGroupName, bool complain, const char *pComplainPrefix)
char *pTextureGroupName, bool complain, const char *pComplainPrefix) { static {
IMaterial *st = ((FindMaterial_t)hooks::materialsystem.GetMethod(73))(this_, static IMaterial *st = FindMaterial_Original(this_, pMaterialName, pTextureGroupName, complain, pComplainPrefix);
pMaterialName, pTextureGroupName, complain, pComplainPrefix); return st; return st;
} }
void ReloadTextures_null_hook(void* this_) {} void ReloadTextures_null_hook(void *this_)
void ReloadMaterials_null_hook(void* this_, const char *pSubString) {} {
void ReloadFilesInList_null_hook(void* this_, IFileList *pFilesToReload) {} }
*/ void ReloadMaterials_null_hook(void *this_, const char *pSubString)
{
}
void ReloadFilesInList_null_hook(void *this_, IFileList *pFilesToReload)
{
}
void NullHook()
{
g_IMaterialSystem->SetInStubMode(true);
}
void RemoveNullHook()
{
g_IMaterialSystem->SetInStubMode(false);
}
static CatCommand ApplyNullhook("debug_material_hook", "Debug", []() { NullHook(); });
static CatCommand RemoveNullhook("debug_material_hook_clear", "Debug", []() { RemoveNullHook(); });
static settings::Bool debug_framerate("debug.framerate", "false");
static float framerate = 0.0f;
static Timer send_timer{};
static InitRoutine init([]() {
#if !ENABLE_VISUALS
NullHook();
#endif
EC::Register(
EC::Paint,
[]() {
if (!*debug_framerate)
return;
framerate = 0.9 * framerate + (1.0 - 0.9) * g_GlobalVars->absoluteframetime;
if (send_timer.test_and_set(1000))
logging::Info("FPS: %f", 1.0f / framerate);
},
"material_cm");
});

View File

@ -0,0 +1 @@
target_sources(cathook PRIVATE "${CMAKE_CURRENT_LIST_DIR}/DrawModelExecute.cpp")

View File

@ -0,0 +1,12 @@
/*
Created by Jenny White on 29.04.18.
Copyright (c) 2018 nullworks. All rights reserved.
*/
#include "HookedMethods.hpp"
namespace hooked_methods
{
DEFINE_HOOKED_METHOD(DrawModelExecute, void, IVModelRender *this_, const DrawModelState_t &state, const ModelRenderInfo_t &info, matrix3x4_t *bone)
{
}
}

View File

@ -53,7 +53,6 @@ static CatCommand cat("cat", "", [](const CCommand &args) {
void save_thread(const int ArgC, const std::string ArgS) void save_thread(const int ArgC, const std::string ArgS)
{ {
std::this_thread::sleep_for(std::chrono_literals::operator""s(1));
settings::SettingsWriter writer{ settings::Manager::instance() }; settings::SettingsWriter writer{ settings::Manager::instance() };
DIR *config_directory = opendir(DATA_PATH "/configs"); DIR *config_directory = opendir(DATA_PATH "/configs");
@ -99,7 +98,6 @@ static CatCommand save("save", "", [](const CCommand &args) {
void load_thread(const int ArgC, const std::string ArgS) void load_thread(const int ArgC, const std::string ArgS)
{ {
std::this_thread::sleep_for(std::chrono_literals::operator""s(1));
settings::SettingsReader loader{ settings::Manager::instance() }; settings::SettingsReader loader{ settings::Manager::instance() };
if (ArgC == 1) if (ArgC == 1)
{ {
@ -123,7 +121,6 @@ void load_thread(const int ArgC, const std::string ArgS)
logging::Info("cat_load: Force crash. Couldn't load config!"); logging::Info("cat_load: Force crash. Couldn't load config!");
std::terminate(); std::terminate();
} }
std::this_thread::sleep_for(std::chrono_literals::operator""s(3));
} }
#endif #endif
} }
@ -190,7 +187,7 @@ static void getAndSortAllConfigs()
logging::Info("Sorted %u config files\n", sortedConfigs.size()); logging::Info("Sorted %u config files\n", sortedConfigs.size());
} }
static CatCommand cat_find("find", "Find a command by name", [](const CCommand &args){ static CatCommand cat_find("find", "Find a command by name", [](const CCommand &args) {
// We need arguments // We need arguments
if (args.ArgC() < 2) if (args.ArgC() < 2)
return logging::Info("Usage: cat_find (name)"); return logging::Info("Usage: cat_find (name)");
@ -212,15 +209,14 @@ static CatCommand cat_find("find", "Find a command by name", [](const CCommand &
found_rvars.push_back(s); found_rvars.push_back(s);
} }
// Yes // Yes
g_ICvar->ConsoleColorPrintf(Color(*print_r, *print_g, *print_b, 255),"Found rvars:\n"); g_ICvar->ConsoleColorPrintf(Color(*print_r, *print_g, *print_b, 255), "Found rvars:\n");
// Nothing found :C // Nothing found :C
if (found_rvars.empty()) if (found_rvars.empty())
g_ICvar->ConsoleColorPrintf(Color(*print_r, *print_g, *print_b, 255),"No rvars found.\n"); g_ICvar->ConsoleColorPrintf(Color(*print_r, *print_g, *print_b, 255), "No rvars found.\n");
// Found rvars // Found rvars
else else
for (auto &s : found_rvars) for (auto &s : found_rvars)
g_ICvar->ConsoleColorPrintf(Color(*print_r, *print_g, *print_b, 255),"%s\n",s.c_str()); g_ICvar->ConsoleColorPrintf(Color(*print_r, *print_g, *print_b, 255), "%s\n", s.c_str());
}); });
static int cat_completionCallback(const char *c_partial, char commands[COMMAND_COMPLETION_MAXITEMS][COMMAND_COMPLETION_ITEM_LENGTH]) static int cat_completionCallback(const char *c_partial, char commands[COMMAND_COMPLETION_MAXITEMS][COMMAND_COMPLETION_ITEM_LENGTH])