renderdoc.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #define HL_NAME(n) heaps_##n
  2. #include <renderdoc_app.h>
  3. #include <hl.h>
  4. #ifdef HL_WIN
  5. # undef _GUID
  6. # include <windows.h>
  7. EXTERN_C IMAGE_DOS_HEADER __ImageBase;
  8. # define dlopen(l,p) (void*)( (l) ? LoadLibraryA(l) : (HMODULE)&__ImageBase)
  9. # define dlsym(h,n) GetProcAddress((HANDLE)h,n)
  10. #else
  11. # include <dlfcn.h>
  12. #endif
  13. RENDERDOC_API_1_0_0 *rdoc_api;
  14. HL_PRIM bool HL_NAME(rdoc_init)() {
  15. pRENDERDOC_GetAPI RENDERDOC_GetAPI = NULL;
  16. #ifdef HL_WIN
  17. void *mod = dlopen("renderdoc.dll", RTLD_NOW | RTLD_NOLOAD);
  18. #elif defined(HL_LINUX)
  19. void *mod = dlopen("librenderdoc.so", RTLD_NOW | RTLD_NOLOAD);
  20. #elif defined(HL_MAC)
  21. void *mod = dlopen("librenderdoc.dylib", RTLD_NOW | RTLD_NOLOAD);
  22. #else
  23. void *mod = NULL;
  24. #endif
  25. if( mod )
  26. RENDERDOC_GetAPI = (pRENDERDOC_GetAPI)dlsym(mod, "RENDERDOC_GetAPI");
  27. if( RENDERDOC_GetAPI )
  28. {
  29. int ret = RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_0_0, (void **)&rdoc_api);
  30. if( ret == 1 )
  31. return true;
  32. }
  33. rdoc_api = NULL;
  34. return false;
  35. }
  36. HL_PRIM bool HL_NAME(rdoc_set_capture_keys)(vbyte *keys, int num) {
  37. if( rdoc_api == NULL )
  38. return false;
  39. rdoc_api->SetCaptureKeys((RENDERDOC_InputButton*)keys, num);
  40. return true;
  41. }
  42. HL_PRIM bool HL_NAME(rdoc_set_capture_file_path_template)(vbyte *pathtemplate) {
  43. if( rdoc_api == NULL )
  44. return false;
  45. rdoc_api->SetCaptureFilePathTemplate((char*)pathtemplate);
  46. return true;
  47. }
  48. HL_PRIM vbyte *HL_NAME(rdoc_get_capture_file_path_template)() {
  49. if( rdoc_api == NULL )
  50. return NULL;
  51. return (vbyte *)rdoc_api->GetCaptureFilePathTemplate();
  52. }
  53. HL_PRIM int HL_NAME(rdoc_get_num_captures)() {
  54. if( rdoc_api == NULL )
  55. return -1;
  56. return rdoc_api->GetNumCaptures();
  57. }
  58. HL_PRIM bool HL_NAME(rdoc_get_capture)(int index, vbyte *filename, int *pathlength, int64 *timestamp) {
  59. if( rdoc_api == NULL )
  60. return false;
  61. int ret = rdoc_api->GetCapture(index, (char*)filename, (uint32_t*)pathlength, (uint64_t*)timestamp);
  62. return ret == 1 ? true : false;
  63. }
  64. HL_PRIM bool HL_NAME(rdoc_trigger_capture)() {
  65. if( rdoc_api == NULL )
  66. return false;
  67. rdoc_api->TriggerCapture();
  68. return true;
  69. }
  70. HL_PRIM bool HL_NAME(rdoc_is_target_control_connected)() {
  71. if( rdoc_api == NULL )
  72. return false;
  73. int ret = rdoc_api->IsTargetControlConnected();
  74. return ret == 1 ? true : false;
  75. }
  76. HL_PRIM bool HL_NAME(rdoc_launch_replay_ui)(int connectTargetControl, vbyte *cmdline) {
  77. if( rdoc_api == NULL )
  78. return false;
  79. int ret = rdoc_api->LaunchReplayUI(connectTargetControl, (char*)cmdline);
  80. return ret == 1 ? true : false;
  81. }
  82. HL_PRIM bool HL_NAME(rdoc_start_frame_capture)(void *device, void *wndHandle) {
  83. if( rdoc_api == NULL )
  84. return false;
  85. rdoc_api->StartFrameCapture(device, wndHandle);
  86. return true;
  87. }
  88. HL_PRIM bool HL_NAME(rdoc_is_frame_capturing)() {
  89. if( rdoc_api == NULL )
  90. return false;
  91. int ret = rdoc_api->IsFrameCapturing();
  92. return ret == 1 ? true : false;
  93. }
  94. HL_PRIM bool HL_NAME(rdoc_end_frame_capture)(void *device, void *wndHandle) {
  95. if( rdoc_api == NULL )
  96. return false;
  97. int ret = rdoc_api->EndFrameCapture(device, wndHandle);
  98. return ret == 1 ? true : false;
  99. }
  100. DEFINE_PRIM(_BOOL, rdoc_init, _NO_ARG);
  101. DEFINE_PRIM(_BOOL, rdoc_set_capture_keys, _BYTES _I32);
  102. DEFINE_PRIM(_BOOL, rdoc_set_capture_file_path_template, _BYTES);
  103. DEFINE_PRIM(_BYTES, rdoc_get_capture_file_path_template, _NO_ARG);
  104. DEFINE_PRIM(_I32, rdoc_get_num_captures, _NO_ARG);
  105. DEFINE_PRIM(_BOOL, rdoc_get_capture, _I32 _BYTES _REF(_I32) _REF(_I64));
  106. DEFINE_PRIM(_BOOL, rdoc_trigger_capture, _NO_ARG);
  107. DEFINE_PRIM(_BOOL, rdoc_is_target_control_connected, _NO_ARG);
  108. DEFINE_PRIM(_BOOL, rdoc_launch_replay_ui, _I32 _BYTES);
  109. DEFINE_PRIM(_BOOL, rdoc_start_frame_capture, _DYN _DYN);
  110. DEFINE_PRIM(_BOOL, rdoc_is_frame_capturing, _NO_ARG);
  111. DEFINE_PRIM(_BOOL, rdoc_end_frame_capture, _DYN _DYN);