diff --git a/src/mods/VR.cpp b/src/mods/VR.cpp index 412c55bde..4a4a4a798 100644 --- a/src/mods/VR.cpp +++ b/src/mods/VR.cpp @@ -3884,6 +3884,7 @@ void VR::on_draw_ui() { m_force_lensflares_settings->draw("Force Disable Lens Flares"); m_force_dynamic_shadows_settings->draw("Force Enable Dynamic Shadows"); m_allow_engine_overlays->draw("Allow Engine Overlays"); + m_desktop_fix->draw("Desktop Recording Fix"); ImGui::Separator(); ImGui::Text("Debug info"); diff --git a/src/mods/VR.hpp b/src/mods/VR.hpp index d8ab3b2e3..8c1ca7463 100644 --- a/src/mods/VR.hpp +++ b/src/mods/VR.hpp @@ -517,6 +517,7 @@ class VR : public Mod { const ModToggle::Ptr m_force_lensflares_settings{ ModToggle::create(generate_name("ForceLensFlares"), true) }; const ModToggle::Ptr m_force_dynamic_shadows_settings{ ModToggle::create(generate_name("ForceDynamicShadows"), true) }; const ModToggle::Ptr m_allow_engine_overlays{ ModToggle::create(generate_name("AllowEngineOverlays"), true) }; + const ModToggle::Ptr m_desktop_fix{ ModToggle::create(generate_name("DesktopRecordingFix"), true) }; bool m_disable_projection_matrix_override{ false }; bool m_disable_gui_camera_projection_matrix_override{ false }; @@ -548,7 +549,8 @@ class VR : public Mod { *m_ui_distance_option, *m_world_ui_scale_option, *m_allow_engine_overlays, - *m_resolution_scale + *m_resolution_scale, + *m_desktop_fix, }; bool m_use_rotation{true}; diff --git a/src/mods/vr/D3D11Component.cpp b/src/mods/vr/D3D11Component.cpp index 769a742c3..d8952e72a 100644 --- a/src/mods/vr/D3D11Component.cpp +++ b/src/mods/vr/D3D11Component.cpp @@ -112,7 +112,7 @@ vr::EVRCompositorError D3D11Component::on_frame(VR* vr) { vr->m_submitted = true; } - if (runtime->ready()) { + if (runtime->ready() && vr->m_desktop_fix->value()) { hook->ignore_next_present(); } } diff --git a/src/mods/vr/D3D12Component.cpp b/src/mods/vr/D3D12Component.cpp index 7489a639f..3b83db58f 100644 --- a/src/mods/vr/D3D12Component.cpp +++ b/src/mods/vr/D3D12Component.cpp @@ -148,10 +148,12 @@ vr::EVRCompositorError D3D12Component::on_frame(VR* vr) { } // Allows the desktop window to be recorded. - if (runtime->ready() && m_prev_backbuffer != backbuffer && m_prev_backbuffer != nullptr) { - m_generic_copiers[frame_count % 3].wait(INFINITE); - m_generic_copiers[frame_count % 3].copy(m_prev_backbuffer.Get(), backbuffer.Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_PRESENT); - m_generic_copiers[frame_count % 3].execute(); + if (vr->m_desktop_fix->value()) { + if (runtime->ready() && m_prev_backbuffer != backbuffer && m_prev_backbuffer != nullptr) { + m_generic_copiers[frame_count % 3].wait(INFINITE); + m_generic_copiers[frame_count % 3].copy(m_prev_backbuffer.Get(), backbuffer.Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_PRESENT); + m_generic_copiers[frame_count % 3].execute(); + } } }