├── .gitattributes ├── .gitignore ├── README.md ├── RenderDocManager.h ├── RenderDocManager.cpp └── renderdoc_app.h /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # ========================= 18 | # Operating System Files 19 | # ========================= 20 | 21 | # OSX 22 | # ========================= 23 | 24 | .DS_Store 25 | .AppleDouble 26 | .LSOverride 27 | 28 | # Icon must ends with two \r. 29 | Icon 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear on external disk 35 | .Spotlight-V100 36 | .Trashes 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This is a small code skeleton heavily based on the work of Temaran (https://github.com/Temaran/UE4RenderDocPlugin) that will integrate RenderDoc (https://github.com/baldurk/renderdoc) in your engine. 2 | 3 | Keep in mind that the RenderDoc API is still in its early stage, it's not release quality yet, it may have some issues and might evolve in the following versions. 4 | 5 | You just need to call the RenderDocManager constructor before the D3D initialization and you should be able to capture a frame using the StartFrameCapture() and EndFrameCapture() or by pressing the "CaptureKey" defined in the constructor. 6 | 7 | The capture options defined in the code example might make the program run much slower, for better performances only activate the options you need. 8 | 9 | For more informations: http://www.alexandre-pestana.com/integrating-renderdoc/ -------------------------------------------------------------------------------- /RenderDocManager.h: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | * The MIT License (MIT) 3 | * 4 | * Copyright (c) 2014 Fredrik Lindh 5 | * 6 | * Permission is hereby granted, free of charge, to any person obtaining a copy 7 | * of this software and associated documentation files (the "Software"), to deal 8 | * in the Software without restriction, including without limitation the rights 9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | * copies of the Software, and to permit persons to whom the Software is 11 | * furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in 14 | * all copies or substantial portions of the Software. 15 | * 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | * THE SOFTWARE. 23 | ******************************************************************************/ 24 | 25 | #pragma once 26 | #include "renderdoc_app.h" 27 | 28 | class RenderDocManager 29 | { 30 | public: 31 | RenderDocManager(HWND p_Handle, LPCWSTR pRenderDocPath, LPCWSTR pCapturePath); 32 | ~RenderDocManager(void); 33 | void StartFrameCapture(); 34 | void EndFrameCapture(); 35 | 36 | private: 37 | HINSTANCE m_RenderDocDLL; 38 | UINT32 m_SocketPort; 39 | HWND m_Handle; 40 | bool m_CaptureStarted; 41 | 42 | //General 43 | pRENDERDOC_GetAPIVersion m_RenderDocGetAPIVersion; 44 | pRENDERDOC_SetLogFile m_RenderDocSetLogFile; 45 | 46 | //Capture 47 | pRENDERDOC_SetCaptureOptions m_RenderDocSetCaptureOptions; 48 | pRENDERDOC_GetCapture m_RenderDocGetCapture; 49 | pRENDERDOC_SetActiveWindow m_RenderDocSetActiveWindow; 50 | pRENDERDOC_TriggerCapture m_RenderDocTriggerCapture; 51 | pRENDERDOC_StartFrameCapture m_RenderDocStartFrameCapture; 52 | pRENDERDOC_EndFrameCapture m_RenderDocEndFrameCapture; 53 | 54 | //Overlay 55 | pRENDERDOC_GetOverlayBits m_RenderDocGetOverlayBits; 56 | pRENDERDOC_MaskOverlayBits m_RenderDocMaskOverlayBits; 57 | 58 | //Hotkeys 59 | pRENDERDOC_SetFocusToggleKeys m_RenderDocSetFocusToggleKeys; 60 | pRENDERDOC_SetCaptureKeys m_RenderDocSetCaptureKeys; 61 | 62 | //Remote access 63 | pRENDERDOC_InitRemoteAccess m_RenderDocInitRemoteAccess; 64 | 65 | void* GetRenderDocFunctionPointer(HINSTANCE ModuleHandle, LPCSTR FunctionName); 66 | }; 67 | 68 | -------------------------------------------------------------------------------- /RenderDocManager.cpp: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | * The MIT License (MIT) 3 | * 4 | * Copyright (c) 2014 Fredrik Lindh 5 | * 6 | * Permission is hereby granted, free of charge, to any person obtaining a copy 7 | * of this software and associated documentation files (the "Software"), to deal 8 | * in the Software without restriction, including without limitation the rights 9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | * copies of the Software, and to permit persons to whom the Software is 11 | * furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in 14 | * all copies or substantial portions of the Software. 15 | * 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | * THE SOFTWARE. 23 | ******************************************************************************/ 24 | 25 | #include "stdafx.h" 26 | #include "RenderDocManager.h" 27 | #include 28 | 29 | RenderDocManager::RenderDocManager(HWND p_Handle, LPCWSTR pRenderDocPath, LPCWSTR pCapturePath) 30 | { 31 | m_Handle = p_Handle; 32 | m_CaptureStarted = false; 33 | 34 | m_RenderDocDLL = LoadLibrary(pRenderDocPath); 35 | 36 | //Init function pointers 37 | m_RenderDocGetAPIVersion = (pRENDERDOC_GetAPIVersion)GetRenderDocFunctionPointer(m_RenderDocDLL, "RENDERDOC_GetAPIVersion"); 38 | m_RenderDocSetLogFile = (pRENDERDOC_SetLogFile)GetRenderDocFunctionPointer(m_RenderDocDLL, "RENDERDOC_SetLogFile"); 39 | 40 | m_RenderDocSetCaptureOptions = (pRENDERDOC_SetCaptureOptions)GetRenderDocFunctionPointer(m_RenderDocDLL, "RENDERDOC_SetCaptureOptions"); 41 | m_RenderDocGetCapture = (pRENDERDOC_GetCapture)GetRenderDocFunctionPointer(m_RenderDocDLL, "RENDERDOC_GetCapture"); 42 | m_RenderDocSetActiveWindow = (pRENDERDOC_SetActiveWindow)GetRenderDocFunctionPointer(m_RenderDocDLL, "RENDERDOC_SetActiveWindow"); 43 | m_RenderDocTriggerCapture = (pRENDERDOC_TriggerCapture)GetRenderDocFunctionPointer(m_RenderDocDLL, "RENDERDOC_TriggerCapture"); 44 | m_RenderDocStartFrameCapture = (pRENDERDOC_StartFrameCapture)GetRenderDocFunctionPointer(m_RenderDocDLL, "RENDERDOC_StartFrameCapture"); 45 | m_RenderDocEndFrameCapture = (pRENDERDOC_EndFrameCapture)GetRenderDocFunctionPointer(m_RenderDocDLL, "RENDERDOC_EndFrameCapture"); 46 | 47 | m_RenderDocGetOverlayBits = (pRENDERDOC_GetOverlayBits)GetRenderDocFunctionPointer(m_RenderDocDLL, "RENDERDOC_GetOverlayBits"); 48 | m_RenderDocMaskOverlayBits = (pRENDERDOC_MaskOverlayBits)GetRenderDocFunctionPointer(m_RenderDocDLL, "RENDERDOC_MaskOverlayBits"); 49 | 50 | m_RenderDocSetFocusToggleKeys = (pRENDERDOC_SetFocusToggleKeys)GetRenderDocFunctionPointer(m_RenderDocDLL, "RENDERDOC_SetFocusToggleKeys"); 51 | m_RenderDocSetCaptureKeys = (pRENDERDOC_SetCaptureKeys)GetRenderDocFunctionPointer(m_RenderDocDLL, "RENDERDOC_SetCaptureKeys"); 52 | 53 | m_RenderDocInitRemoteAccess = (pRENDERDOC_InitRemoteAccess)GetRenderDocFunctionPointer(m_RenderDocDLL, "RENDERDOC_InitRemoteAccess"); 54 | 55 | // Make sure that the code is compatible with the current installed version. 56 | if (RENDERDOC_API_VERSION != m_RenderDocGetAPIVersion()) 57 | { 58 | OutputDebugString(L"Render doc API is not compatible !"); 59 | FreeLibrary(m_RenderDocDLL); 60 | return; 61 | } 62 | 63 | m_RenderDocSetLogFile(pCapturePath); 64 | 65 | KeyButton captureKey = eKey_F12; 66 | 67 | m_RenderDocSetFocusToggleKeys(NULL, 0); 68 | m_RenderDocSetCaptureKeys(NULL, 0); 69 | 70 | // Uncomment to define a capture key. 71 | //KeyButton captureKey = eKey_F12; 72 | //m_RenderDocSetCaptureKeys(&captureKey, 1); 73 | 74 | CaptureOptions options; 75 | // These options might slow down your program, enable only the ones you need. 76 | options.CaptureCallstacks = true; 77 | options.CaptureAllCmdLists = true; 78 | options.SaveAllInitials = true; 79 | 80 | m_RenderDocSetCaptureOptions(&options); 81 | 82 | // Init remote access. 83 | m_SocketPort = 0; 84 | m_RenderDocInitRemoteAccess(&m_SocketPort); 85 | 86 | m_RenderDocMaskOverlayBits(eOverlay_None, eOverlay_None); 87 | } 88 | 89 | void RenderDocManager::StartFrameCapture() 90 | { 91 | m_RenderDocStartFrameCapture(m_Handle); 92 | m_CaptureStarted = true; 93 | } 94 | 95 | // In some cases a capture can fail. It happens when Map() was called before the StartFrameCapture() and then Unmap() is called. 96 | // It also happen if you start recording a command list before the StartFrameCapture() (unless you have the option 97 | // CaptureAllCmdLists enabled). 98 | // In these cases, m_RenderDocEndFrameCapture will return false and start capturing again until a capture succeed, unless 99 | // m_RenderDocEndFrameCapture is called again. 100 | void RenderDocManager::EndFrameCapture() 101 | { 102 | if(!m_CaptureStarted) 103 | return; 104 | 105 | if(m_RenderDocEndFrameCapture(m_Handle)) 106 | { 107 | m_CaptureStarted = false; 108 | return; 109 | } 110 | 111 | OutputDebugString(L"Capture has failed !") 112 | ; 113 | // The capture has failed, calling m_RenderDocEndFrameCapture several time to make sure it won't keep capturing forever. 114 | while (!m_RenderDocEndFrameCapture(m_Handle)) 115 | { 116 | } 117 | 118 | m_CaptureStarted = false; 119 | return; 120 | } 121 | 122 | RenderDocManager::~RenderDocManager(void) 123 | { 124 | FreeLibrary(m_RenderDocDLL); 125 | } 126 | 127 | void* RenderDocManager::GetRenderDocFunctionPointer(HINSTANCE ModuleHandle, LPCSTR FunctionName) 128 | { 129 | void* OutTarget = NULL; 130 | OutTarget = (void*)GetProcAddress(ModuleHandle, FunctionName); 131 | 132 | return OutTarget; 133 | } 134 | -------------------------------------------------------------------------------- /renderdoc_app.h: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | * The MIT License (MIT) 3 | * 4 | * Copyright (c) 2014 Crytek 5 | * 6 | * Permission is hereby granted, free of charge, to any person obtaining a copy 7 | * of this software and associated documentation files (the "Software"), to deal 8 | * in the Software without restriction, including without limitation the rights 9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | * copies of the Software, and to permit persons to whom the Software is 11 | * furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in 14 | * all copies or substantial portions of the Software. 15 | * 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | * THE SOFTWARE. 23 | ******************************************************************************/ 24 | 25 | 26 | #pragma once 27 | 28 | #include 29 | 30 | typedef uint8_t byte; 31 | typedef uint32_t bool32; 32 | 33 | #ifdef WIN32 34 | 35 | #ifdef RENDERDOC_EXPORTS 36 | #define RENDERDOC_API __declspec(dllexport) 37 | #else 38 | #define RENDERDOC_API __declspec(dllimport) 39 | #endif 40 | #define RENDERDOC_CC __cdecl 41 | 42 | #elif defined(LINUX) 43 | 44 | #ifdef RENDERDOC_EXPORTS 45 | #define RENDERDOC_API __attribute__ ((visibility ("default"))) 46 | #else 47 | #define RENDERDOC_API 48 | #endif 49 | 50 | #define RENDERDOC_CC 51 | 52 | #else 53 | 54 | #error "Unknown platform" 55 | 56 | #endif 57 | 58 | #include 59 | #include // istringstream/ostringstream used to avoid other dependencies 60 | 61 | struct CaptureOptions 62 | { 63 | CaptureOptions() 64 | : AllowVSync(true), 65 | AllowFullscreen(true), 66 | DebugDeviceMode(false), 67 | CaptureCallstacks(false), 68 | CaptureCallstacksOnlyDraws(false), 69 | DelayForDebugger(0), 70 | CacheStateObjects(true), 71 | HookIntoChildren(false), 72 | RefAllResources(false), 73 | SaveAllInitials(false), 74 | CaptureAllCmdLists(false) 75 | {} 76 | 77 | bool32 AllowVSync; 78 | bool32 AllowFullscreen; 79 | bool32 DebugDeviceMode; 80 | bool32 CaptureCallstacks; 81 | bool32 CaptureCallstacksOnlyDraws; 82 | uint32_t DelayForDebugger; 83 | bool32 CacheStateObjects; 84 | bool32 HookIntoChildren; 85 | bool32 RefAllResources; 86 | bool32 SaveAllInitials; 87 | bool32 CaptureAllCmdLists; 88 | 89 | #ifdef __cplusplus 90 | void FromString(std::string str) 91 | { 92 | std::istringstream iss(str); 93 | 94 | iss >> AllowFullscreen 95 | >> AllowVSync 96 | >> DebugDeviceMode 97 | >> CaptureCallstacks 98 | >> CaptureCallstacksOnlyDraws 99 | >> DelayForDebugger 100 | >> CacheStateObjects 101 | >> HookIntoChildren 102 | >> RefAllResources 103 | >> SaveAllInitials 104 | >> CaptureAllCmdLists; 105 | } 106 | 107 | std::string ToString() const 108 | { 109 | std::ostringstream oss; 110 | 111 | oss << AllowFullscreen << " " 112 | << AllowVSync << " " 113 | << DebugDeviceMode << " " 114 | << CaptureCallstacks << " " 115 | << CaptureCallstacksOnlyDraws << " " 116 | << DelayForDebugger << " " 117 | << CacheStateObjects << " " 118 | << HookIntoChildren << " " 119 | << RefAllResources << " " 120 | << SaveAllInitials << " " 121 | << CaptureAllCmdLists << " "; 122 | 123 | return oss.str(); 124 | } 125 | #endif 126 | }; 127 | 128 | enum KeyButton 129 | { 130 | eKey_0 = 0x30, // '0' 131 | // ... 132 | eKey_9 = 0x39, // '9' 133 | eKey_A = 0x41, // 'A' 134 | // ... 135 | eKey_Z = 0x5A, // 'Z' 136 | 137 | eKey_Divide, 138 | eKey_Multiply, 139 | eKey_Subtract, 140 | eKey_Plus, 141 | 142 | eKey_F1, 143 | eKey_F2, 144 | eKey_F3, 145 | eKey_F4, 146 | eKey_F5, 147 | eKey_F6, 148 | eKey_F7, 149 | eKey_F8, 150 | eKey_F9, 151 | eKey_F10, 152 | eKey_F11, 153 | eKey_F12, 154 | 155 | eKey_Home, 156 | eKey_End, 157 | eKey_Insert, 158 | eKey_Delete, 159 | eKey_PageUp, 160 | eKey_PageDn, 161 | 162 | eKey_Backspace, 163 | eKey_Tab, 164 | eKey_PrtScrn, 165 | eKey_Pause, 166 | 167 | eKey_Max, 168 | }; 169 | 170 | enum InAppOverlay 171 | { 172 | eOverlay_Enabled = 0x1, 173 | eOverlay_FrameRate = 0x2, 174 | eOverlay_FrameNumber = 0x4, 175 | eOverlay_CaptureList = 0x8, 176 | 177 | eOverlay_Default = (eOverlay_Enabled|eOverlay_FrameRate|eOverlay_FrameNumber|eOverlay_CaptureList), 178 | eOverlay_All = ~0U, 179 | eOverlay_None = 0, 180 | }; 181 | 182 | #define RENDERDOC_API_VERSION 1 183 | 184 | ////////////////////////////////////////////////////////////////////////// 185 | // In-program functions 186 | ////////////////////////////////////////////////////////////////////////// 187 | 188 | extern "C" RENDERDOC_API int RENDERDOC_CC RENDERDOC_GetAPIVersion(); 189 | typedef int (RENDERDOC_CC *pRENDERDOC_GetAPIVersion)(); 190 | 191 | extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_SetLogFile(const wchar_t *logfile); 192 | typedef void (RENDERDOC_CC *pRENDERDOC_SetLogFile)(const wchar_t *logfile); 193 | 194 | extern "C" RENDERDOC_API const wchar_t* RENDERDOC_CC RENDERDOC_GetLogFile(); 195 | typedef const wchar_t* (RENDERDOC_CC *pRENDERDOC_GetLogFile)(); 196 | 197 | extern "C" RENDERDOC_API bool RENDERDOC_CC RENDERDOC_GetCapture(uint32_t idx, wchar_t *logfile, uint32_t *pathlength, uint64_t *timestamp); 198 | typedef bool (RENDERDOC_CC *pRENDERDOC_GetCapture)(uint32_t idx, wchar_t *logfile, uint32_t *pathlength, uint64_t *timestamp); 199 | 200 | extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_SetCaptureOptions(const CaptureOptions *opts); 201 | typedef void (RENDERDOC_CC *pRENDERDOC_SetCaptureOptions)(const CaptureOptions *opts); 202 | 203 | extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_SetActiveWindow(void *wndHandle); 204 | typedef void (RENDERDOC_CC *pRENDERDOC_SetActiveWindow)(void *wndHandle); 205 | 206 | extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_TriggerCapture(); 207 | typedef void (RENDERDOC_CC *pRENDERDOC_TriggerCapture)(); 208 | 209 | extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_StartFrameCapture(void *wndHandle); 210 | typedef void (RENDERDOC_CC *pRENDERDOC_StartFrameCapture)(void *wndHandle); 211 | 212 | extern "C" RENDERDOC_API bool RENDERDOC_CC RENDERDOC_EndFrameCapture(void *wndHandle); 213 | typedef bool (RENDERDOC_CC *pRENDERDOC_EndFrameCapture)(void *wndHandle); 214 | 215 | extern "C" RENDERDOC_API uint32_t RENDERDOC_CC RENDERDOC_GetOverlayBits(); 216 | typedef uint32_t (RENDERDOC_CC *pRENDERDOC_GetOverlayBits)(); 217 | 218 | extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_MaskOverlayBits(uint32_t And, uint32_t Or); 219 | typedef void (RENDERDOC_CC *pRENDERDOC_MaskOverlayBits)(uint32_t And, uint32_t Or); 220 | 221 | extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_SetFocusToggleKeys(KeyButton *keys, int num); 222 | typedef void (RENDERDOC_CC *pRENDERDOC_SetFocusToggleKeys)(KeyButton *keys, int num); 223 | 224 | extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_SetCaptureKeys(KeyButton *keys, int num); 225 | typedef void (RENDERDOC_CC *pRENDERDOC_SetCaptureKeys)(KeyButton *keys, int num); 226 | 227 | ////////////////////////////////////////////////////////////////////////// 228 | // Injection/execution capture functions. 229 | ////////////////////////////////////////////////////////////////////////// 230 | 231 | extern "C" RENDERDOC_API uint32_t RENDERDOC_CC RENDERDOC_ExecuteAndInject(const wchar_t *app, const wchar_t *workingDir, const wchar_t *cmdLine, 232 | const wchar_t *logfile, const CaptureOptions *opts, bool waitForExit); 233 | typedef uint32_t (RENDERDOC_CC *pRENDERDOC_ExecuteAndInject)(const wchar_t *app, const wchar_t *workingDir, const wchar_t *cmdLine, 234 | const wchar_t *logfile, const CaptureOptions *opts, bool waitForExit); 235 | 236 | extern "C" RENDERDOC_API uint32_t RENDERDOC_CC RENDERDOC_InjectIntoProcess(uint32_t pid, const wchar_t *logfile, const CaptureOptions *opts, bool waitForExit); 237 | typedef uint32_t (RENDERDOC_CC *pRENDERDOC_InjectIntoProcess)(uint32_t pid, const wchar_t *logfile, const CaptureOptions *opts, bool waitForExit); 238 | 239 | extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_InitRemoteAccess(uint32_t *ident); 240 | typedef void (RENDERDOC_CC *pRENDERDOC_InitRemoteAccess)(uint32_t *ident); --------------------------------------------------------------------------------