From 399eaabde2164e67cf881aea16646a7e368e94fb Mon Sep 17 00:00:00 2001 From: praydog Date: Wed, 15 May 2024 05:56:52 -0700 Subject: [PATCH 1/3] Graphics: Add "replace shader" --- src/mods/Graphics.cpp | 15 ++++++++++++++- src/mods/Graphics.hpp | 8 ++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/mods/Graphics.cpp b/src/mods/Graphics.cpp index 0a31248e1..d24a960c7 100644 --- a/src/mods/Graphics.cpp +++ b/src/mods/Graphics.cpp @@ -177,6 +177,10 @@ void Graphics::on_draw_ui() { } if (interception_node_open) { + if (ImGui::InputText(std::format("Replace Shader", i).c_str(), intercepted.replace_with_name.data(), intercepted.replace_with_name.size())) { + intercepted.replace_with_hash = sdk::murmur_hash::calc32_as_utf8(intercepted.replace_with_name.data()); + } + for (auto& replacement : intercepted.replacement_shaders) { i++; ImGui::PushID(std::format("Shader {}", i).c_str()); @@ -1110,7 +1114,7 @@ sdk::renderer::PipelineState* Graphics::find_pipeline_state_hook(void* shader_re auto& graphics = Graphics::get(); const auto og = graphics->m_find_pipeline_state_hook->get_original(); - const auto result = og(shader_resource, murmur_hash, unk); + auto result = og(shader_resource, murmur_hash, unk); if (!graphics->m_shader_playground->value()) { return result; @@ -1135,6 +1139,15 @@ sdk::renderer::PipelineState* Graphics::find_pipeline_state_hook(void* shader_re if (intercepted_shader == nullptr) { return result; } + + if (intercepted_shader->replace_with_hash != 0 || std::string_view{intercepted_shader->replace_with_name} == "None") { + const auto replacement = og(shader_resource, intercepted_shader->replace_with_hash, unk); + + if (replacement != nullptr) { + result = replacement; + } + } + uint32_t i = 1; for (auto& replacement_shader : intercepted_shader->replacement_shaders) { diff --git a/src/mods/Graphics.hpp b/src/mods/Graphics.hpp index 1964d45d0..1f14fb4fb 100644 --- a/src/mods/Graphics.hpp +++ b/src/mods/Graphics.hpp @@ -97,6 +97,14 @@ class Graphics : public Mod { }(); uint32_t hash{ 0 }; + + std::string replace_with_name = []() { + std::string result{}; + result.resize(1024); + return result; + }(); + + uint32_t replace_with_hash{ 0 }; }; std::array m_intercepted_shaders{}; From b9d3f0a507529477d3308f13c510dc5629dce730 Mon Sep 17 00:00:00 2001 From: praydog Date: Wed, 15 May 2024 06:02:00 -0700 Subject: [PATCH 2/3] Deps: Update safetyhook to merged hash --- cmake.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake.toml b/cmake.toml index a307e4712..fc8c50e14 100644 --- a/cmake.toml +++ b/cmake.toml @@ -114,7 +114,7 @@ condition = "build-framework-dependencies" [fetch-content.safetyhook] git = "https://github.com/cursey/safetyhook" -tag = "4faf792c2d66cbf06f2c942561d053aafd79006b" +tag = "b046e123dc69821f2c375161e0adef3c6d9c9db4" [target.imgui] type = "static" From 440cca96bfb2f2daa968d5ef8bf5f6ec2f896ccd Mon Sep 17 00:00:00 2001 From: praydog Date: Wed, 15 May 2024 06:02:48 -0700 Subject: [PATCH 3/3] Update CMakeLists.txt --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0f44cbcfe..1fba96bec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -114,13 +114,13 @@ FetchContent_Declare( ) FetchContent_MakeAvailable(directxtk12) -message(STATUS "Fetching safetyhook (4faf792c2d66cbf06f2c942561d053aafd79006b)...") +message(STATUS "Fetching safetyhook (b046e123dc69821f2c375161e0adef3c6d9c9db4)...") FetchContent_Declare( safetyhook GIT_REPOSITORY https://github.com/cursey/safetyhook GIT_TAG - 4faf792c2d66cbf06f2c942561d053aafd79006b + b046e123dc69821f2c375161e0adef3c6d9c9db4 ) FetchContent_MakeAvailable(safetyhook)