From 0b5f7d2c5f8006ba46c05a964bf22e9fc6fcba96 Mon Sep 17 00:00:00 2001 From: iwubcode Date: Thu, 21 Jul 2022 22:26:36 -0500 Subject: [PATCH] VideoCommon: fix graphics target not properly setting 'draw_started' texture names for efb/xfb --- .../Config/GraphicsTarget.cpp | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/Source/Core/VideoCommon/GraphicsModSystem/Config/GraphicsTarget.cpp b/Source/Core/VideoCommon/GraphicsModSystem/Config/GraphicsTarget.cpp index f55f184520..07f00624e4 100644 --- a/Source/Core/VideoCommon/GraphicsModSystem/Config/GraphicsTarget.cpp +++ b/Source/Core/VideoCommon/GraphicsModSystem/Config/GraphicsTarget.cpp @@ -124,30 +124,30 @@ std::optional ExtractTextureFilenameForConfig(const picojson::objec return std::nullopt; } std::string texture_info = texture_filename_iter->second.get(); - if (texture_info.find(EFB_DUMP_PREFIX) != std::string::npos) - { - const auto letter_c_pos = texture_info.find_first_of('n'); - if (letter_c_pos == std::string::npos) + + const auto handle_fb_texture = + [&texture_info](std::string_view type) -> std::optional { + const auto letter_n_pos = texture_info.find("_n"); + if (letter_n_pos == std::string::npos) { - ERROR_LOG_FMT(VIDEO, "Failed to load mod configuration file, value in 'texture_filename' " - "is an efb without a count"); + ERROR_LOG_FMT(VIDEO, + "Failed to load mod configuration file, value in 'texture_filename' " + "is {} without a count", + type); return std::nullopt; } - texture_info = - texture_info.substr(letter_c_pos - 1, texture_info.find_first_of("_", letter_c_pos)); - } - else if (texture_info.find(XFB_DUMP_PREFIX) != std::string::npos) - { - const auto letter_c_pos = texture_info.find_first_of('n'); - if (letter_c_pos == std::string::npos) - { - ERROR_LOG_FMT(VIDEO, "Failed to load mod configuration file, value in 'texture_filename' " - "is an xfb without a count"); - return std::nullopt; - } - texture_info = - texture_info.substr(letter_c_pos - 1, texture_info.find_first_of("_", letter_c_pos)); - } + + const auto post_underscore = texture_info.find_first_of('_', letter_n_pos + 2); + if (post_underscore == std::string::npos) + return texture_info.erase(letter_n_pos, texture_info.size() - letter_n_pos); + else + return texture_info.erase(letter_n_pos, post_underscore - letter_n_pos); + }; + + if (texture_info.starts_with(EFB_DUMP_PREFIX)) + return handle_fb_texture("an efb"); + else if (texture_info.starts_with(XFB_DUMP_PREFIX)) + return handle_fb_texture("a xfb"); return texture_info; } } // namespace