| 93 | |
| 94 | |
| 95 | static int |
| 96 | traceProgram(trace::API api, |
| 97 | char * const *argv, |
| 98 | const char *output, |
| 99 | int verbose, |
| 100 | bool debug, |
| 101 | bool mhook, |
| 102 | bool timestamp) |
| 103 | { |
| 104 | const char *wrapperFilename; |
| 105 | std::vector<const char *> args; |
| 106 | int status = 1; |
| 107 | |
| 108 | /* |
| 109 | * TODO: simplify code |
| 110 | */ |
| 111 | |
| 112 | bool useInject = false; |
| 113 | switch (api) { |
| 114 | case trace::API_GL: |
| 115 | wrapperFilename = GL_TRACE_WRAPPER; |
| 116 | break; |
| 117 | #ifdef EGL_TRACE_WRAPPER |
| 118 | case trace::API_EGL: |
| 119 | wrapperFilename = EGL_TRACE_WRAPPER; |
| 120 | break; |
| 121 | #endif |
| 122 | #ifdef _WIN32 |
| 123 | case trace::API_D3D7: |
| 124 | wrapperFilename = "ddraw.dll"; |
| 125 | break; |
| 126 | case trace::API_D3D8: |
| 127 | wrapperFilename = "d3d8.dll"; |
| 128 | break; |
| 129 | case trace::API_D3D9: |
| 130 | wrapperFilename = "d3d9.dll"; |
| 131 | break; |
| 132 | case trace::API_DXGI: |
| 133 | wrapperFilename = "dxgitrace.dll"; |
| 134 | useInject = true; |
| 135 | break; |
| 136 | case trace::API_D2D1: |
| 137 | wrapperFilename = "d2d1trace.dll"; |
| 138 | useInject = true; |
| 139 | break; |
| 140 | #endif |
| 141 | default: |
| 142 | std::cerr << "error: unsupported API\n"; |
| 143 | return 1; |
| 144 | } |
| 145 | |
| 146 | os::String wrapperPath = findWrapper(wrapperFilename, verbose); |
| 147 | if (!wrapperPath.length()) { |
| 148 | std::cerr << "error: failed to find " << wrapperFilename << " wrapper (rerun with -v option for more details)\n"; |
| 149 | goto exit; |
| 150 | } |
| 151 | |
| 152 | #if defined(_WIN32) |
no test coverage detected