| 651 | ReShadeUnregisterOverlayForAddon(nullptr, title, callback); |
| 652 | } |
| 653 | void ReShadeUnregisterOverlayForAddon(void *module, const char *title, void(*callback)(reshade::api::effect_runtime *runtime)) |
| 654 | { |
| 655 | reshade::addon_info *const info = reshade::find_addon(module != nullptr ? module : static_cast<void *>(callback)); |
| 656 | if (info == nullptr) |
| 657 | return; // Do not log an error here, since this may be called if an add-on failed to load |
| 658 | |
| 659 | assert(info->handle == module || module == nullptr); |
| 660 | |
| 661 | if (title == nullptr) |
| 662 | { |
| 663 | assert(callback == info->settings_overlay_callback); |
| 664 | info->settings_overlay_callback = nullptr; |
| 665 | return; |
| 666 | } |
| 667 | |
| 668 | #if RESHADE_VERBOSE_LOG |
| 669 | // Log before removing from overlay list below, since pointer to title string may become invalid by the removal |
| 670 | reshade::log::message(reshade::log::level::debug, "Unregistered overlay with title \"%s\" and callback %p.", title, static_cast<void *>(callback)); |
| 671 | #endif |
| 672 | |
| 673 | info->overlay_callbacks.erase(std::remove_if(info->overlay_callbacks.begin(), info->overlay_callbacks.end(), |
| 674 | [title, callback](const reshade::addon_info::overlay_callback &item) { |
| 675 | return item.title == title && item.callback == callback; |
| 676 | }), info->overlay_callbacks.end()); |
| 677 | } |
| 678 | |
| 679 | #endif |
| 680 |
no test coverage detected