plugin-main.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include <windows.h>
  2. #include <obs-module.h>
  3. #include <util/windows/win-version.h>
  4. #include <util/platform.h>
  5. OBS_DECLARE_MODULE()
  6. OBS_MODULE_USE_DEFAULT_LOCALE("win-capture", "en-US")
  7. extern struct obs_source_info duplicator_capture_info;
  8. extern struct obs_source_info monitor_capture_info;
  9. extern struct obs_source_info window_capture_info;
  10. extern struct obs_source_info game_capture_info;
  11. extern bool cached_versions_match(void);
  12. extern bool load_cached_graphics_offsets(bool is32bit);
  13. extern bool load_graphics_offsets(bool is32bit);
  14. /* temporary, will eventually be erased once we figure out how to create both
  15. * 32bit and 64bit versions of the helpers/hook */
  16. #ifdef _WIN64
  17. #define IS32BIT false
  18. #else
  19. #define IS32BIT true
  20. #endif
  21. bool obs_module_load(void)
  22. {
  23. struct win_version_info ver;
  24. bool win8_or_above = false;
  25. char *config_dir;
  26. config_dir = obs_module_config_path(NULL);
  27. if (config_dir) {
  28. os_mkdirs(config_dir);
  29. bfree(config_dir);
  30. }
  31. get_win_ver(&ver);
  32. win8_or_above = ver.major > 6 || (ver.major == 6 && ver.minor >= 2);
  33. obs_enter_graphics();
  34. if (win8_or_above && gs_get_device_type() == GS_DEVICE_DIRECT3D_11)
  35. obs_register_source(&duplicator_capture_info);
  36. else
  37. obs_register_source(&monitor_capture_info);
  38. obs_leave_graphics();
  39. obs_register_source(&window_capture_info);
  40. if (cached_versions_match() && load_cached_graphics_offsets(IS32BIT)) {
  41. load_cached_graphics_offsets(!IS32BIT);
  42. obs_register_source(&game_capture_info);
  43. } else if (load_graphics_offsets(IS32BIT)) {
  44. load_graphics_offsets(!IS32BIT);
  45. obs_register_source(&game_capture_info);
  46. }
  47. return true;
  48. }