plugin-main.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. #define USE_HOOK_ADDRESS_CACHE false
  22. bool obs_module_load(void)
  23. {
  24. struct win_version_info ver;
  25. bool win8_or_above = false;
  26. char *config_dir;
  27. config_dir = obs_module_config_path(NULL);
  28. if (config_dir) {
  29. os_mkdirs(config_dir);
  30. bfree(config_dir);
  31. }
  32. get_win_ver(&ver);
  33. win8_or_above = ver.major > 6 || (ver.major == 6 && ver.minor >= 2);
  34. obs_enter_graphics();
  35. if (win8_or_above && gs_get_device_type() == GS_DEVICE_DIRECT3D_11)
  36. obs_register_source(&duplicator_capture_info);
  37. else
  38. obs_register_source(&monitor_capture_info);
  39. obs_leave_graphics();
  40. obs_register_source(&window_capture_info);
  41. if (USE_HOOK_ADDRESS_CACHE &&
  42. cached_versions_match() &&
  43. load_cached_graphics_offsets(IS32BIT)) {
  44. load_cached_graphics_offsets(!IS32BIT);
  45. obs_register_source(&game_capture_info);
  46. } else if (load_graphics_offsets(IS32BIT)) {
  47. load_graphics_offsets(!IS32BIT);
  48. obs_register_source(&game_capture_info);
  49. }
  50. return true;
  51. }