Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions gamebridge_reshade/src/directx10weaver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,15 @@ void DirectX10Weaver::draw_status_overlay(reshade::api::effect_runtime *runtime)
latencyModeDisplay += "IN " + std::to_string(runtime->get_back_buffer_count()) + " FRAMES";
}
ImGui::TextUnformatted(latencyModeDisplay.c_str());

// Log when we are weaving
std::string weavingTimingDisplay = "Weaving timing: ";
if(weaveOnShader) {
weavingTimingDisplay += "after SuperDepth3D shader is drawn";
} else {
weavingTimingDisplay += "after all ReShade effects are finished";
}
ImGui::TextUnformatted(weavingTimingDisplay.c_str());
}

void DirectX10Weaver::draw_debug_overlay(reshade::api::effect_runtime* runtime)
Expand Down
9 changes: 9 additions & 0 deletions gamebridge_reshade/src/directx11weaver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,15 @@ void DirectX11Weaver::draw_status_overlay(reshade::api::effect_runtime *runtime)
latencyModeDisplay += "IN " + std::to_string(runtime->get_back_buffer_count()) + " FRAMES";
}
ImGui::TextUnformatted(latencyModeDisplay.c_str());

// Log when we are weaving
std::string weavingTimingDisplay = "Weaving timing: ";
if(weaveOnShader) {
weavingTimingDisplay += "after SuperDepth3D shader is drawn";
} else {
weavingTimingDisplay += "after all ReShade effects are finished";
}
ImGui::TextUnformatted(weavingTimingDisplay.c_str());
}

void DirectX11Weaver::draw_sr_settings_overlay(reshade::api::effect_runtime* runtime)
Expand Down
9 changes: 9 additions & 0 deletions gamebridge_reshade/src/directx12weaver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,15 @@ void DirectX12Weaver::draw_status_overlay(reshade::api::effect_runtime *runtime)
latencyModeDisplay += "IN " + std::to_string(runtime->get_back_buffer_count()) + " FRAMES";
}
ImGui::TextUnformatted(latencyModeDisplay.c_str());

// Log when we are weaving
std::string weavingTimingDisplay = "Weaving timing: ";
if(weaveOnShader) {
weavingTimingDisplay += "after SuperDepth3D shader is drawn";
} else {
weavingTimingDisplay += "after all ReShade effects are finished";
}
ImGui::TextUnformatted(weavingTimingDisplay.c_str());
}

void DirectX12Weaver::draw_debug_overlay(reshade::api::effect_runtime* runtime)
Expand Down
9 changes: 9 additions & 0 deletions gamebridge_reshade/src/directx9weaver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,15 @@ void DirectX9Weaver::draw_status_overlay(reshade::api::effect_runtime *runtime)
latencyModeDisplay += "IN " + std::to_string(runtime->get_back_buffer_count()) + " FRAMES";
}
ImGui::TextUnformatted(latencyModeDisplay.c_str());

// Log when we are weaving
std::string weavingTimingDisplay = "Weaving timing: ";
if(weaveOnShader) {
weavingTimingDisplay += "after SuperDepth3D shader is drawn";
} else {
weavingTimingDisplay += "after all ReShade effects are finished";
}
ImGui::TextUnformatted(weavingTimingDisplay.c_str());
}

void DirectX9Weaver::draw_debug_overlay(reshade::api::effect_runtime* runtime)
Expand Down
31 changes: 26 additions & 5 deletions gamebridge_reshade/src/dllmain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,16 @@ static void execute_hot_key_function_by_type(std::map<shortcutType, bool> hot_ke
//Log the current mode:
reshade::log_message(reshade::log_level::info, "Current latency mode set to: STATIC 40000 Microseconds");
}
case shortcutType::toggle_weave_on_shader:
// Here we switch between weaving on_render_technique when we see SR.fx and weaving on_finish_effects as usual
if (i->second) {
weaver_implementation->weaveOnShader = true;
reshade::log_message(reshade::log_level::info, "Current weaver timing set to: weave when SuperDepth3D.fx is finished");
}
else {
weaver_implementation->weaveOnShader = false;
reshade::log_message(reshade::log_level::info, "Current weaver timing set to: weave when all effects are finished");
}

default:
break;
Expand Down Expand Up @@ -234,13 +244,28 @@ static void on_reshade_begin_effects(reshade::api::effect_runtime* runtime, resh
effects_are_active = false;
}

static void on_render_technique(reshade::api::effect_runtime *runtime, reshade::api::effect_technique technique, reshade::api::command_list *cmd_list, reshade::api::resource_view rtv, reshade::api::resource_view rtv_srgb) {
effects_are_active = true;
if (weaver_implementation->weaveOnShader) {
g_charBufferSize = CHAR_BUFFER_SIZE;
runtime->get_technique_name(technique, g_charBuffer, &g_charBufferSize);
string name(g_charBuffer);
if (!name.compare(depth_3D_shader_name)) {
weaver_implementation->on_reshade_finish_effects(runtime, cmd_list, rtv, rtv_srgb);
}
}
}

static void on_reshade_finish_effects(reshade::api::effect_runtime* runtime, reshade::api::command_list* cmd_list, reshade::api::resource_view rtv, reshade::api::resource_view rtv_srgb) {
if(!sr_initialized) {
return;
}

std::map<shortcutType, bool> hot_key_list;

// Make a local copy of the weaveOnShader so that when it's updated by the hotkey, it will not weave twice on the same frame.
bool weaveOnShaderLocal = weaver_implementation->weaveOnShader;

//Check if certain hotkeys are being pressed
if (hotKey_manager != nullptr) {
//Find out which hotkeys have changed their toggled state, then execute their respective code.
Expand All @@ -249,7 +274,7 @@ static void on_reshade_finish_effects(reshade::api::effect_runtime* runtime, res
}

// Todo: This workaround should be removed in the next ReShade version (> v6.0.1)
if (effects_are_active) {
if (effects_are_active && !weaveOnShaderLocal) {
weaver_implementation->on_reshade_finish_effects(runtime, cmd_list, rtv, rtv_srgb);
}
}
Expand Down Expand Up @@ -321,10 +346,6 @@ static void on_init_effect_runtime(reshade::api::effect_runtime* runtime) {
weaver_implementation->on_init_effect_runtime(runtime);
}

static void on_render_technique(reshade::api::effect_runtime *runtime, reshade::api::effect_technique technique, reshade::api::command_list *cmd_list, reshade::api::resource_view rtv, reshade::api::resource_view rtv_srgb) {
effects_are_active = true;
}

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
Expand Down
2 changes: 2 additions & 0 deletions gamebridge_reshade/src/hotkeymanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,13 @@ HotKeyManager::HotKeyManager()
HotKey toggle3D = HotKey(false, shortcutType::toggle_3D, 0x33, false, false, true);
HotKey toggleLensAnd3D = HotKey(false, shortcutType::toggle_lens_and_3D, 0x34, false, false, true);
HotKey toggleLatencyMode = HotKey(false, shortcutType::toggle_latency_mode, 0x35, false, false, true);
HotKey toggleWeaveOnShader = HotKey(false, shortcutType::toggle_weave_on_shader, 0x36, false, false, true);
registered_hot_keys.push_back(toggleSRKey);
registered_hot_keys.push_back(toggleLensKey);
registered_hot_keys.push_back(toggle3D);
registered_hot_keys.push_back(toggleLensAnd3D);
registered_hot_keys.push_back(toggleLatencyMode);
registered_hot_keys.push_back(toggleWeaveOnShader);
}

bool checkModifierKeys(HotKey hotKey, reshade::api::effect_runtime* runtime) {
Expand Down
2 changes: 2 additions & 0 deletions gamebridge_reshade/src/igraphicsapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ class IGraphicsApi {

int32_t get_concatinated_reshade_version();

bool weaveOnShader = false;

virtual void draw_debug_overlay(reshade::api::effect_runtime* runtime) = 0;
virtual void draw_sr_settings_overlay(reshade::api::effect_runtime* runtime) = 0;
virtual void draw_settings_overlay(reshade::api::effect_runtime* runtime) = 0;
Expand Down
2 changes: 1 addition & 1 deletion gamebridge_reshade/src/pch.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,6 @@
#include "sr/types.h"

// Global shortcut definition
enum shortcutType { toggle_SR, toggle_lens, toggle_3D, toggle_lens_and_3D, toggle_latency_mode };
enum shortcutType { toggle_weave_on_shader, toggle_SR, toggle_lens, toggle_3D, toggle_lens_and_3D, toggle_latency_mode };

#endif //PCH_H