From b573158056732569ea5a4a2eb3f6a94a0bc13bd3 Mon Sep 17 00:00:00 2001 From: praydog Date: Tue, 7 May 2024 00:37:22 -0700 Subject: [PATCH 1/5] Update kananlib again (slight performance optimization) --- CMakeLists.txt | 4 ++-- cmake.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0cc160a3f..acf2172b8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,13 +134,13 @@ FetchContent_Declare( ) FetchContent_MakeAvailable(bddisasm) -message(STATUS "Fetching kananlib (203dc31c5d8ba2cffdb780ae38b2eb2080bb099c)...") +message(STATUS "Fetching kananlib (e2fc649013ed82284ba8c264e10d91fa90b2ab51)...") FetchContent_Declare( kananlib GIT_REPOSITORY https://github.com/cursey/kananlib GIT_TAG - 203dc31c5d8ba2cffdb780ae38b2eb2080bb099c + e2fc649013ed82284ba8c264e10d91fa90b2ab51 ) FetchContent_MakeAvailable(kananlib) diff --git a/cmake.toml b/cmake.toml index 716538c4b..3f76d54d5 100644 --- a/cmake.toml +++ b/cmake.toml @@ -175,7 +175,7 @@ tag = "v1.34.10" [fetch-content.kananlib] git = "https://github.com/cursey/kananlib" -tag = "203dc31c5d8ba2cffdb780ae38b2eb2080bb099c" +tag = "e2fc649013ed82284ba8c264e10d91fa90b2ab51" [target.utility] type = "static" From 5d5ae6384a4f59efecf956b865d75701e24b86d6 Mon Sep 17 00:00:00 2001 From: praydog Date: Tue, 7 May 2024 21:32:02 -0700 Subject: [PATCH 2/5] Further startup time improvements (kananlib update again) --- CMakeLists.txt | 4 ++-- cmake.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index acf2172b8..f53f654f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,13 +134,13 @@ FetchContent_Declare( ) FetchContent_MakeAvailable(bddisasm) -message(STATUS "Fetching kananlib (e2fc649013ed82284ba8c264e10d91fa90b2ab51)...") +message(STATUS "Fetching kananlib (9c134a94e3e14d17eb152424fc82d139d8f993b6)...") FetchContent_Declare( kananlib GIT_REPOSITORY https://github.com/cursey/kananlib GIT_TAG - e2fc649013ed82284ba8c264e10d91fa90b2ab51 + 9c134a94e3e14d17eb152424fc82d139d8f993b6 ) FetchContent_MakeAvailable(kananlib) diff --git a/cmake.toml b/cmake.toml index 3f76d54d5..b9384e96b 100644 --- a/cmake.toml +++ b/cmake.toml @@ -175,7 +175,7 @@ tag = "v1.34.10" [fetch-content.kananlib] git = "https://github.com/cursey/kananlib" -tag = "e2fc649013ed82284ba8c264e10d91fa90b2ab51" +tag = "9c134a94e3e14d17eb152424fc82d139d8f993b6" [target.utility] type = "static" From 8c6fe61636127352df8b676c04ddf6728c01868d Mon Sep 17 00:00:00 2001 From: praydog Date: Wed, 8 May 2024 15:21:55 -0700 Subject: [PATCH 3/5] Fix some minor scan irregularities --- CMakeLists.txt | 4 ++-- cmake.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f53f654f8..cfe482805 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,13 +134,13 @@ FetchContent_Declare( ) FetchContent_MakeAvailable(bddisasm) -message(STATUS "Fetching kananlib (9c134a94e3e14d17eb152424fc82d139d8f993b6)...") +message(STATUS "Fetching kananlib (65c205e9f3f0985fd298281a77098d48b9065e87)...") FetchContent_Declare( kananlib GIT_REPOSITORY https://github.com/cursey/kananlib GIT_TAG - 9c134a94e3e14d17eb152424fc82d139d8f993b6 + 65c205e9f3f0985fd298281a77098d48b9065e87 ) FetchContent_MakeAvailable(kananlib) diff --git a/cmake.toml b/cmake.toml index b9384e96b..93748ea8f 100644 --- a/cmake.toml +++ b/cmake.toml @@ -175,7 +175,7 @@ tag = "v1.34.10" [fetch-content.kananlib] git = "https://github.com/cursey/kananlib" -tag = "9c134a94e3e14d17eb152424fc82d139d8f993b6" +tag = "65c205e9f3f0985fd298281a77098d48b9065e87" [target.utility] type = "static" From ef2f789297bcb928de59f332790ba376afd25bf6 Mon Sep 17 00:00:00 2001 From: praydog Date: Wed, 8 May 2024 15:56:10 -0700 Subject: [PATCH 4/5] SDK: Add MasterMaterialResource::find (for PipelineStates) --- CMakeLists.txt | 48 ++++++++++++ shared/sdk/renderer/PipelineState.hpp | 7 ++ .../sdk/resources/MasterMaterialResource.cpp | 73 +++++++++++++++++++ .../sdk/resources/MasterMaterialResource.hpp | 19 +++++ shared/sdk/resources/ShaderResource.hpp | 11 +++ 5 files changed, 158 insertions(+) create mode 100644 shared/sdk/renderer/PipelineState.hpp create mode 100644 shared/sdk/resources/MasterMaterialResource.cpp create mode 100644 shared/sdk/resources/MasterMaterialResource.hpp create mode 100644 shared/sdk/resources/ShaderResource.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index cfe482805..47cbbe926 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -572,6 +572,7 @@ if(REF_BUILD_RE2_SDK OR REF_BUILD_FRAMEWORK) # build-re2-sdk "shared/sdk/SystemArray.cpp" "shared/sdk/helpers/NativeObject.cpp" "shared/sdk/renderer/RenderResource.cpp" + "shared/sdk/resources/MasterMaterialResource.cpp" "shared/sdk/Application.hpp" "shared/sdk/Enums_Internal.hpp" "shared/sdk/GUIPrimitiveSystem.hpp" @@ -1322,7 +1323,10 @@ if(REF_BUILD_RE2_SDK OR REF_BUILD_FRAMEWORK) # build-re2-sdk "shared/sdk/regenny/sf6/via/typeinfo/TypeInfo.hpp" "shared/sdk/regenny/sf6/via/vec3.hpp" "shared/sdk/regenny/sf6/via/vec4.hpp" + "shared/sdk/renderer/PipelineState.hpp" "shared/sdk/renderer/RenderResource.hpp" + "shared/sdk/resources/MasterMaterialResource.hpp" + "shared/sdk/resources/ShaderResource.hpp" ) list(APPEND RE2SDK_SOURCES @@ -1396,6 +1400,7 @@ if(REF_BUILD_RE2_TDB66SDK OR REF_BUILD_FRAMEWORK) # build-re2tdb66-sdk "shared/sdk/SystemArray.cpp" "shared/sdk/helpers/NativeObject.cpp" "shared/sdk/renderer/RenderResource.cpp" + "shared/sdk/resources/MasterMaterialResource.cpp" "shared/sdk/Application.hpp" "shared/sdk/Enums_Internal.hpp" "shared/sdk/GUIPrimitiveSystem.hpp" @@ -2146,7 +2151,10 @@ if(REF_BUILD_RE2_TDB66SDK OR REF_BUILD_FRAMEWORK) # build-re2tdb66-sdk "shared/sdk/regenny/sf6/via/typeinfo/TypeInfo.hpp" "shared/sdk/regenny/sf6/via/vec3.hpp" "shared/sdk/regenny/sf6/via/vec4.hpp" + "shared/sdk/renderer/PipelineState.hpp" "shared/sdk/renderer/RenderResource.hpp" + "shared/sdk/resources/MasterMaterialResource.hpp" + "shared/sdk/resources/ShaderResource.hpp" ) list(APPEND RE2_TDB66SDK_SOURCES @@ -2635,6 +2643,7 @@ if(REF_BUILD_RE3_SDK OR REF_BUILD_FRAMEWORK) # build-re3-sdk "shared/sdk/SystemArray.cpp" "shared/sdk/helpers/NativeObject.cpp" "shared/sdk/renderer/RenderResource.cpp" + "shared/sdk/resources/MasterMaterialResource.cpp" "shared/sdk/Application.hpp" "shared/sdk/Enums_Internal.hpp" "shared/sdk/GUIPrimitiveSystem.hpp" @@ -3385,7 +3394,10 @@ if(REF_BUILD_RE3_SDK OR REF_BUILD_FRAMEWORK) # build-re3-sdk "shared/sdk/regenny/sf6/via/typeinfo/TypeInfo.hpp" "shared/sdk/regenny/sf6/via/vec3.hpp" "shared/sdk/regenny/sf6/via/vec4.hpp" + "shared/sdk/renderer/PipelineState.hpp" "shared/sdk/renderer/RenderResource.hpp" + "shared/sdk/resources/MasterMaterialResource.hpp" + "shared/sdk/resources/ShaderResource.hpp" ) list(APPEND RE3SDK_SOURCES @@ -3459,6 +3471,7 @@ if(REF_BUILD_RE3_TDB67SDK OR REF_BUILD_FRAMEWORK) # build-re3tdb67-sdk "shared/sdk/SystemArray.cpp" "shared/sdk/helpers/NativeObject.cpp" "shared/sdk/renderer/RenderResource.cpp" + "shared/sdk/resources/MasterMaterialResource.cpp" "shared/sdk/Application.hpp" "shared/sdk/Enums_Internal.hpp" "shared/sdk/GUIPrimitiveSystem.hpp" @@ -4209,7 +4222,10 @@ if(REF_BUILD_RE3_TDB67SDK OR REF_BUILD_FRAMEWORK) # build-re3tdb67-sdk "shared/sdk/regenny/sf6/via/typeinfo/TypeInfo.hpp" "shared/sdk/regenny/sf6/via/vec3.hpp" "shared/sdk/regenny/sf6/via/vec4.hpp" + "shared/sdk/renderer/PipelineState.hpp" "shared/sdk/renderer/RenderResource.hpp" + "shared/sdk/resources/MasterMaterialResource.hpp" + "shared/sdk/resources/ShaderResource.hpp" ) list(APPEND RE3_TDB67SDK_SOURCES @@ -4905,6 +4921,7 @@ if(REF_BUILD_RE4_SDK OR REF_BUILD_FRAMEWORK) # build-re4-sdk "shared/sdk/SystemArray.cpp" "shared/sdk/helpers/NativeObject.cpp" "shared/sdk/renderer/RenderResource.cpp" + "shared/sdk/resources/MasterMaterialResource.cpp" "shared/sdk/Application.hpp" "shared/sdk/Enums_Internal.hpp" "shared/sdk/GUIPrimitiveSystem.hpp" @@ -5655,7 +5672,10 @@ if(REF_BUILD_RE4_SDK OR REF_BUILD_FRAMEWORK) # build-re4-sdk "shared/sdk/regenny/sf6/via/typeinfo/TypeInfo.hpp" "shared/sdk/regenny/sf6/via/vec3.hpp" "shared/sdk/regenny/sf6/via/vec4.hpp" + "shared/sdk/renderer/PipelineState.hpp" "shared/sdk/renderer/RenderResource.hpp" + "shared/sdk/resources/MasterMaterialResource.hpp" + "shared/sdk/resources/ShaderResource.hpp" ) list(APPEND RE4SDK_SOURCES @@ -5731,6 +5751,7 @@ if(REF_BUILD_RE7_SDK OR REF_BUILD_FRAMEWORK) # build-re7-sdk "shared/sdk/SystemArray.cpp" "shared/sdk/helpers/NativeObject.cpp" "shared/sdk/renderer/RenderResource.cpp" + "shared/sdk/resources/MasterMaterialResource.cpp" "shared/sdk/Application.hpp" "shared/sdk/Enums_Internal.hpp" "shared/sdk/GUIPrimitiveSystem.hpp" @@ -6481,7 +6502,10 @@ if(REF_BUILD_RE7_SDK OR REF_BUILD_FRAMEWORK) # build-re7-sdk "shared/sdk/regenny/sf6/via/typeinfo/TypeInfo.hpp" "shared/sdk/regenny/sf6/via/vec3.hpp" "shared/sdk/regenny/sf6/via/vec4.hpp" + "shared/sdk/renderer/PipelineState.hpp" "shared/sdk/renderer/RenderResource.hpp" + "shared/sdk/resources/MasterMaterialResource.hpp" + "shared/sdk/resources/ShaderResource.hpp" ) list(APPEND RE7SDK_SOURCES @@ -6555,6 +6579,7 @@ if(REF_BUILD_RE7_TDB49SDK OR REF_BUILD_FRAMEWORK) # build-re7tdb49-sdk "shared/sdk/SystemArray.cpp" "shared/sdk/helpers/NativeObject.cpp" "shared/sdk/renderer/RenderResource.cpp" + "shared/sdk/resources/MasterMaterialResource.cpp" "shared/sdk/Application.hpp" "shared/sdk/Enums_Internal.hpp" "shared/sdk/GUIPrimitiveSystem.hpp" @@ -7305,7 +7330,10 @@ if(REF_BUILD_RE7_TDB49SDK OR REF_BUILD_FRAMEWORK) # build-re7tdb49-sdk "shared/sdk/regenny/sf6/via/typeinfo/TypeInfo.hpp" "shared/sdk/regenny/sf6/via/vec3.hpp" "shared/sdk/regenny/sf6/via/vec4.hpp" + "shared/sdk/renderer/PipelineState.hpp" "shared/sdk/renderer/RenderResource.hpp" + "shared/sdk/resources/MasterMaterialResource.hpp" + "shared/sdk/resources/ShaderResource.hpp" ) list(APPEND RE7_TDB49SDK_SOURCES @@ -7794,6 +7822,7 @@ if(REF_BUILD_RE8_SDK OR REF_BUILD_FRAMEWORK) # build-re8-sdk "shared/sdk/SystemArray.cpp" "shared/sdk/helpers/NativeObject.cpp" "shared/sdk/renderer/RenderResource.cpp" + "shared/sdk/resources/MasterMaterialResource.cpp" "shared/sdk/Application.hpp" "shared/sdk/Enums_Internal.hpp" "shared/sdk/GUIPrimitiveSystem.hpp" @@ -8544,7 +8573,10 @@ if(REF_BUILD_RE8_SDK OR REF_BUILD_FRAMEWORK) # build-re8-sdk "shared/sdk/regenny/sf6/via/typeinfo/TypeInfo.hpp" "shared/sdk/regenny/sf6/via/vec3.hpp" "shared/sdk/regenny/sf6/via/vec4.hpp" + "shared/sdk/renderer/PipelineState.hpp" "shared/sdk/renderer/RenderResource.hpp" + "shared/sdk/resources/MasterMaterialResource.hpp" + "shared/sdk/resources/ShaderResource.hpp" ) list(APPEND RE8SDK_SOURCES @@ -8827,6 +8859,7 @@ if(REF_BUILD_DMC5_SDK OR REF_BUILD_FRAMEWORK) # build-dmc5-sdk "shared/sdk/SystemArray.cpp" "shared/sdk/helpers/NativeObject.cpp" "shared/sdk/renderer/RenderResource.cpp" + "shared/sdk/resources/MasterMaterialResource.cpp" "shared/sdk/Application.hpp" "shared/sdk/Enums_Internal.hpp" "shared/sdk/GUIPrimitiveSystem.hpp" @@ -9577,7 +9610,10 @@ if(REF_BUILD_DMC5_SDK OR REF_BUILD_FRAMEWORK) # build-dmc5-sdk "shared/sdk/regenny/sf6/via/typeinfo/TypeInfo.hpp" "shared/sdk/regenny/sf6/via/vec3.hpp" "shared/sdk/regenny/sf6/via/vec4.hpp" + "shared/sdk/renderer/PipelineState.hpp" "shared/sdk/renderer/RenderResource.hpp" + "shared/sdk/resources/MasterMaterialResource.hpp" + "shared/sdk/resources/ShaderResource.hpp" ) list(APPEND DMC5SDK_SOURCES @@ -9858,6 +9894,7 @@ if(REF_BUILD_MHRISE_SDK OR REF_BUILD_FRAMEWORK) # build-mhrise-sdk "shared/sdk/SystemArray.cpp" "shared/sdk/helpers/NativeObject.cpp" "shared/sdk/renderer/RenderResource.cpp" + "shared/sdk/resources/MasterMaterialResource.cpp" "shared/sdk/Application.hpp" "shared/sdk/Enums_Internal.hpp" "shared/sdk/GUIPrimitiveSystem.hpp" @@ -10608,7 +10645,10 @@ if(REF_BUILD_MHRISE_SDK OR REF_BUILD_FRAMEWORK) # build-mhrise-sdk "shared/sdk/regenny/sf6/via/typeinfo/TypeInfo.hpp" "shared/sdk/regenny/sf6/via/vec3.hpp" "shared/sdk/regenny/sf6/via/vec4.hpp" + "shared/sdk/renderer/PipelineState.hpp" "shared/sdk/renderer/RenderResource.hpp" + "shared/sdk/resources/MasterMaterialResource.hpp" + "shared/sdk/resources/ShaderResource.hpp" ) list(APPEND MHRISESDK_SOURCES @@ -10891,6 +10931,7 @@ if(REF_BUILD_SF6_SDK OR REF_BUILD_FRAMEWORK) # build-sf6-sdk "shared/sdk/SystemArray.cpp" "shared/sdk/helpers/NativeObject.cpp" "shared/sdk/renderer/RenderResource.cpp" + "shared/sdk/resources/MasterMaterialResource.cpp" "shared/sdk/Application.hpp" "shared/sdk/Enums_Internal.hpp" "shared/sdk/GUIPrimitiveSystem.hpp" @@ -11641,7 +11682,10 @@ if(REF_BUILD_SF6_SDK OR REF_BUILD_FRAMEWORK) # build-sf6-sdk "shared/sdk/regenny/sf6/via/typeinfo/TypeInfo.hpp" "shared/sdk/regenny/sf6/via/vec3.hpp" "shared/sdk/regenny/sf6/via/vec4.hpp" + "shared/sdk/renderer/PipelineState.hpp" "shared/sdk/renderer/RenderResource.hpp" + "shared/sdk/resources/MasterMaterialResource.hpp" + "shared/sdk/resources/ShaderResource.hpp" ) list(APPEND SF6SDK_SOURCES @@ -11924,6 +11968,7 @@ if(REF_BUILD_DD2_SDK OR REF_BUILD_FRAMEWORK) # build-dd2-sdk "shared/sdk/SystemArray.cpp" "shared/sdk/helpers/NativeObject.cpp" "shared/sdk/renderer/RenderResource.cpp" + "shared/sdk/resources/MasterMaterialResource.cpp" "shared/sdk/Application.hpp" "shared/sdk/Enums_Internal.hpp" "shared/sdk/GUIPrimitiveSystem.hpp" @@ -12674,7 +12719,10 @@ if(REF_BUILD_DD2_SDK OR REF_BUILD_FRAMEWORK) # build-dd2-sdk "shared/sdk/regenny/sf6/via/typeinfo/TypeInfo.hpp" "shared/sdk/regenny/sf6/via/vec3.hpp" "shared/sdk/regenny/sf6/via/vec4.hpp" + "shared/sdk/renderer/PipelineState.hpp" "shared/sdk/renderer/RenderResource.hpp" + "shared/sdk/resources/MasterMaterialResource.hpp" + "shared/sdk/resources/ShaderResource.hpp" ) list(APPEND DD2SDK_SOURCES diff --git a/shared/sdk/renderer/PipelineState.hpp b/shared/sdk/renderer/PipelineState.hpp new file mode 100644 index 000000000..8ada5710e --- /dev/null +++ b/shared/sdk/renderer/PipelineState.hpp @@ -0,0 +1,7 @@ +#pragma once + +namespace sdk::renderer { +struct PipelineState { + // Opaque data (for now) +}; +} \ No newline at end of file diff --git a/shared/sdk/resources/MasterMaterialResource.cpp b/shared/sdk/resources/MasterMaterialResource.cpp new file mode 100644 index 000000000..d44aba119 --- /dev/null +++ b/shared/sdk/resources/MasterMaterialResource.cpp @@ -0,0 +1,73 @@ +#include +#include +#include + +#include "../MurmurHash.hpp" + +#include "MasterMaterialResource.hpp" + +namespace sdk::renderer { +MasterMaterialResource::FindFn MasterMaterialResource::get_find_fn() { + static FindFn fn = []() -> FindFn { + spdlog::info("[MasterMaterialResource::get_find_fn] Scanning for MasterMaterialResource::find"); + + const auto game = utility::get_executable(); + const auto string_data = utility::scan_string(game, "UpdateDepthBlockerState"); + + if (!string_data) { + spdlog::error("[MasterMaterialResource::get_find_fn] Failed to find UpdateDepthBlockerState string"); + return nullptr; + } + + const auto string_ref = utility::scan_displacement_reference(game, *string_data); + + if (!string_ref) { + spdlog::error("[MasterMaterialResource::get_find_fn] Failed to find UpdateDepthBlockerState reference"); + return nullptr; + } + + const auto next_fn_call = utility::scan_mnemonic(*string_ref + 4, 100, "CALL"); + + if (!next_fn_call) { + spdlog::error("[MasterMaterialResource::get_find_fn] Failed to find next CALL instruction"); + return nullptr; + } + + const auto next_next_fn_call = utility::scan_mnemonic(*next_fn_call + 5, 100, "CALL"); + + if (!next_next_fn_call) { + spdlog::error("[MasterMaterialResource::get_find_fn] Failed to find next next CALL instruction"); + return nullptr; + } + + const auto result = utility::resolve_displacement(*next_next_fn_call); + + if (!result) { + spdlog::error("[MasterMaterialResource::get_find_fn] Failed to resolve displacement"); + return nullptr; + } + + spdlog::info("[MasterMaterialResource::get_find_fn] Found MasterMaterialResource::find at {0:x}", *result); + + return (FindFn)*result; + }(); + + return fn; +} + +sdk::renderer::PipelineState* MasterMaterialResource::find(uint32_t murmur_hash, uint8_t unk) { + auto fn = get_find_fn(); + + if (fn == nullptr) { + return nullptr; + } + + return fn(this, murmur_hash, unk); +} + +sdk::renderer::PipelineState* MasterMaterialResource::find(std::string_view name, uint8_t unk) { + const auto murmur_hash = sdk::murmur_hash::calc32_as_utf8(name.data()); + + return find(murmur_hash, unk); +} +} \ No newline at end of file diff --git a/shared/sdk/resources/MasterMaterialResource.hpp b/shared/sdk/resources/MasterMaterialResource.hpp new file mode 100644 index 000000000..19b20d3d4 --- /dev/null +++ b/shared/sdk/resources/MasterMaterialResource.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include + +#include "ShaderResource.hpp" +#include "../renderer/PipelineState.hpp" + +namespace sdk::renderer { +class MasterMaterialResource : public ShaderResource { +public: + using FindFn = PipelineState* (*)(MasterMaterialResource*, uint32_t, uint8_t); + static FindFn get_find_fn(); + + PipelineState* find(uint32_t murmur_hash, uint8_t unk); + PipelineState* find(std::string_view name, uint8_t unk); + +private: +}; +} \ No newline at end of file diff --git a/shared/sdk/resources/ShaderResource.hpp b/shared/sdk/resources/ShaderResource.hpp new file mode 100644 index 000000000..a77c0dd47 --- /dev/null +++ b/shared/sdk/resources/ShaderResource.hpp @@ -0,0 +1,11 @@ +#pragma once + +#include "../ResourceManager.hpp" + +namespace sdk::renderer { +class ShaderResource : public sdk::Resource { +public: + +private: +}; +} \ No newline at end of file From 18c22974a17607561f4f5337a214a3585de9a6f0 Mon Sep 17 00:00:00 2001 From: praydog Date: Wed, 8 May 2024 16:55:54 -0700 Subject: [PATCH 5/5] RT: Add "Disable Raster Shadows" for PT (fixes some jaggy shadows) --- src/mods/Graphics.cpp | 34 +++++++++++++++++++++++++++++++--- src/mods/Graphics.hpp | 3 +++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/mods/Graphics.cpp b/src/mods/Graphics.cpp index 2f086be44..57f1dba82 100644 --- a/src/mods/Graphics.cpp +++ b/src/mods/Graphics.cpp @@ -114,6 +114,7 @@ void Graphics::on_draw_ui() { m_ray_tracing_tweaks->draw("Enable Ray Tracing Tweaks"); if (m_ray_tracing_tweaks->value()) { + m_ray_trace_disable_raster_shadows->draw("Disable Raster Shadows (with PT)"); m_ray_trace_type->draw("Ray Trace Type"); const auto clone_tooltip = @@ -817,15 +818,35 @@ void Graphics::apply_ray_tracing_tweaks() { static const auto setBounce = rt_t->get_method("setBounce"); static const auto setSpp = rt_t->get_method("setSpp"); - auto fix = [this](sdk::ManagedObject* target, int32_t rt_type) { + bool any_pt = false; + + static const auto renderer_t = sdk::find_type_definition("via.render.Renderer"); + + static const auto set_DynamicShadowEnable = renderer_t != nullptr ? renderer_t->get_method("set_DynamicShadowEnable") : nullptr; + static const auto get_DynamicShadowEnable = renderer_t != nullptr ? renderer_t->get_method("get_DynamicShadowEnable") : nullptr; + + const auto context = sdk::get_thread_context(); + + auto fix = [this, &any_pt, &context](sdk::ManagedObject* target, int32_t rt_type) { if (target == nullptr) { return; } - const auto context = sdk::get_thread_context(); - if (set_RaytracingMode != nullptr && rt_type > (int32_t)RayTraceType::Disabled) { + any_pt = any_pt || rt_type == (int32_t)RayTraceType::Pure; set_RaytracingMode->call(context, target, rt_type - 1); + + if (rt_type == (int32_t)RayTraceType::Pure && m_ray_trace_disable_raster_shadows->value()) { + if (get_DynamicShadowEnable != nullptr && set_DynamicShadowEnable != nullptr) { + const bool is_shadow_enabled = get_DynamicShadowEnable->call(context); + + if (is_shadow_enabled) { + set_DynamicShadowEnable->call(context, false); + } + + m_was_shadows_disabled = true; + } + } } if (rt_type == (int32_t)RayTraceType::Hybrid || rt_type == (int32_t)RayTraceType::Pure) { @@ -841,6 +862,13 @@ void Graphics::apply_ray_tracing_tweaks() { fix(m_rt_component.get(), m_ray_trace_type->value()); fix(m_rt_cloned_component.get(), m_ray_trace_clone_type_true->value()); + + // Restore shadows if they were disabled + if ((!any_pt || !m_ray_trace_disable_raster_shadows->value()) && m_was_shadows_disabled && set_DynamicShadowEnable != nullptr) { + spdlog::info("[Graphics] Restoring shadows"); + set_DynamicShadowEnable->call(context, true); + m_was_shadows_disabled = false; + } } void* Graphics::rt_draw_hook(REComponent* rt, void* draw_context, void* r8, void* r9) { diff --git a/src/mods/Graphics.hpp b/src/mods/Graphics.hpp index 3f3e4a709..b0b33f6a2 100644 --- a/src/mods/Graphics.hpp +++ b/src/mods/Graphics.hpp @@ -114,6 +114,8 @@ class Graphics : public Mod { }; const ModCombo::Ptr m_ray_trace_type{ ModCombo::create(generate_name("RayTraceType"), s_ray_trace_type) }; + const ModToggle::Ptr m_ray_trace_disable_raster_shadows{ ModToggle::create(generate_name("RayTraceDisableRasterShadowsWithPT"), true) }; + bool m_was_shadows_disabled{ false }; const ModCombo::Ptr m_ray_trace_clone_type_true{ ModCombo::create(generate_name("RayTraceTrueCloneType"), s_ray_trace_type) }; const ModCombo::Ptr m_ray_trace_clone_type_pre{ ModCombo::create(generate_name("RayTraceCloneTypePre"), s_ray_trace_type) }; const ModCombo::Ptr m_ray_trace_clone_type_post{ ModCombo::create(generate_name("RayTraceCloneTypePost"), s_ray_trace_type) }; @@ -142,6 +144,7 @@ class Graphics : public Mod { #if TDB_VER >= 69 *m_ray_tracing_tweaks, *m_ray_trace_type, + *m_ray_trace_disable_raster_shadows, *m_ray_trace_clone_type_true, *m_ray_trace_clone_type_pre, *m_ray_trace_clone_type_post,