diff --git a/plugins/win-capture/duplicator-monitor-capture.c b/plugins/win-capture/duplicator-monitor-capture.c index a7d4ec121..59cb63342 100644 --- a/plugins/win-capture/duplicator-monitor-capture.c +++ b/plugins/win-capture/duplicator-monitor-capture.c @@ -85,7 +85,6 @@ struct duplicator_capture { float reset_timeout; struct cursor_data cursor_data; - bool wgc_supported; void *winrt_module; struct winrt_exports exports; struct winrt_capture *capture_winrt; @@ -176,6 +175,8 @@ choose_method(enum display_capture_method method, bool wgc_supported, return method; } +extern bool wgc_supported; + static inline void update_settings(struct duplicator_capture *capture, obs_data_t *settings) { @@ -186,8 +187,8 @@ static inline void update_settings(struct duplicator_capture *capture, EnumDisplayMonitors(NULL, NULL, enum_monitor, (LPARAM)&monitor); capture->method = choose_method( - (int)obs_data_get_int(settings, "method"), - capture->wgc_supported, monitor.handle, &capture->dxgi_index); + (int)obs_data_get_int(settings, "method"), wgc_supported, + monitor.handle, &capture->dxgi_index); capture->monitor = monitor.id; capture->handle = monitor.handle; @@ -321,11 +322,9 @@ static void *duplicator_capture_create(obs_data_t *settings, if (graphics_uses_d3d11) { static const char *const module = "libobs-winrt"; capture->winrt_module = os_dlopen(module); - if (capture->winrt_module && - load_winrt_imports(&capture->exports, capture->winrt_module, - module) && - capture->exports.winrt_capture_supported()) { - capture->wgc_supported = true; + if (capture->winrt_module) { + load_winrt_imports(&capture->exports, + capture->winrt_module, module); } } @@ -650,7 +649,7 @@ static obs_properties_t *duplicator_capture_properties(void *data) obs_property_list_add_int(p, TEXT_METHOD_AUTO, METHOD_AUTO); obs_property_list_add_int(p, TEXT_METHOD_DXGI, METHOD_DXGI); obs_property_list_add_int(p, TEXT_METHOD_WGC, METHOD_WGC); - obs_property_list_item_disable(p, 2, !capture->wgc_supported); + obs_property_list_item_disable(p, 2, !wgc_supported); obs_property_set_modified_callback(p, display_capture_method_changed); obs_property_t *monitors = obs_properties_add_list( diff --git a/plugins/win-capture/plugin-main.c b/plugins/win-capture/plugin-main.c index 427ebb85b..aed06a159 100644 --- a/plugins/win-capture/plugin-main.c +++ b/plugins/win-capture/plugin-main.c @@ -69,6 +69,7 @@ void wait_for_hook_initialization(void) void init_hook_files(void); bool graphics_uses_d3d11 = false; +bool wgc_supported = false; bool obs_module_load(void) { @@ -76,6 +77,9 @@ bool obs_module_load(void) bool win8_or_above = false; char *config_dir; + struct win_version_info win1903 = { + .major = 10, .minor = 0, .build = 18362, .revis = 0}; + config_dir = obs_module_config_path(NULL); if (config_dir) { os_mkdirs(config_dir); @@ -90,6 +94,9 @@ bool obs_module_load(void) graphics_uses_d3d11 = gs_get_device_type() == GS_DEVICE_DIRECT3D_11; obs_leave_graphics(); + if (graphics_uses_d3d11) + wgc_supported = win_version_compare(&ver, &win1903) >= 0; + if (win8_or_above && graphics_uses_d3d11) obs_register_source(&duplicator_capture_info); else diff --git a/plugins/win-capture/window-capture.c b/plugins/win-capture/window-capture.c index bfd91351c..9ce4347f5 100644 --- a/plugins/win-capture/window-capture.c +++ b/plugins/win-capture/window-capture.c @@ -79,7 +79,6 @@ struct window_capture { struct dc_capture capture; - bool wgc_supported; bool previously_failed; void *winrt_module; struct winrt_exports exports; @@ -174,6 +173,8 @@ static void log_settings(struct window_capture *wc, obs_data_t *s) } } +extern bool wgc_supported; + static void update_settings(struct window_capture *wc, obs_data_t *s) { pthread_mutex_lock(&wc->update_mutex); @@ -188,7 +189,7 @@ static void update_settings(struct window_capture *wc, obs_data_t *s) build_window_strings(window, &wc->class, &wc->title, &wc->executable); - wc->method = choose_method(method, wc->wgc_supported, wc->class); + wc->method = choose_method(method, wgc_supported, wc->class); wc->priority = (enum window_priority)priority; wc->cursor = obs_data_get_bool(s, "cursor"); wc->use_wildcards = obs_data_get_bool(s, "use_wildcards"); @@ -248,11 +249,9 @@ static void *wc_create(obs_data_t *settings, obs_source_t *source) if (graphics_uses_d3d11) { static const char *const module = "libobs-winrt"; wc->winrt_module = os_dlopen(module); - if (wc->winrt_module && - load_winrt_imports(&wc->exports, wc->winrt_module, - module) && - wc->exports.winrt_capture_supported()) { - wc->wgc_supported = true; + if (wc->winrt_module) { + load_winrt_imports(&wc->exports, wc->winrt_module, + module); } } @@ -408,7 +407,7 @@ static obs_properties_t *wc_properties(void *data) obs_property_list_add_int(p, TEXT_METHOD_AUTO, METHOD_AUTO); obs_property_list_add_int(p, TEXT_METHOD_BITBLT, METHOD_BITBLT); obs_property_list_add_int(p, TEXT_METHOD_WGC, METHOD_WGC); - obs_property_list_item_disable(p, 2, !wc->wgc_supported); + obs_property_list_item_disable(p, 2, !wgc_supported); obs_property_set_modified_callback(p, wc_capture_method_changed); p = obs_properties_add_list(ppts, "priority", TEXT_MATCH_PRIORITY,