X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=cli%2Fcli_trace.cpp;fp=cli%2Fcli_trace.cpp;h=3e2b64427068bdf1d1921428d159c0969bdde058;hb=3c772b3743c54cd950545e74f5f334b67e65696f;hp=5903bdc5f7865cd7327a71b9b14f50d97a567e37;hpb=b1700a69b204580a9b75371ba7388e48a9b74a4d;p=apitrace diff --git a/cli/cli_trace.cpp b/cli/cli_trace.cpp index 5903bdc..3e2b644 100644 --- a/cli/cli_trace.cpp +++ b/cli/cli_trace.cpp @@ -133,7 +133,26 @@ traceProgram(trace::API api, } #if defined(_WIN32) - useInject = true; + /* + * Use DLL injection method on Windows, even for APIs that don't stricly + * need it. Except when tracing OpenGL on Windows 8, as the injection + * method seems to have troubles tracing the internal + * gdi32.dll!SwapBuffers -> opengl32.dll!wglSwapBuffer calls, per github + * issue #172. + */ + { + OSVERSIONINFO osvi; + ZeroMemory(&osvi, sizeof osvi); + osvi.dwOSVersionInfoSize = sizeof osvi; + GetVersionEx(&osvi); + BOOL bIsWindows8orLater = + osvi.dwMajorVersion > 6 || + (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion >= 2); + if (api != trace::API_GL || !bIsWindows8orLater) { + useInject = true; + } + } + if (useInject) { args.push_back("inject"); args.push_back(wrapperPath);