X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fd3dretrace_main.cpp;h=9878fe3c87b059690527f6c6e44f523d72f4880d;hb=808f1ccdb87a7962ae3f7c149c0e031b24f150c3;hp=15053e4d1369f953b8f00d6b7fe115ad8bb681b2;hpb=0e5d1ff1e54079cdb89b409a5621fc33414244d6;p=apitrace diff --git a/retrace/d3dretrace_main.cpp b/retrace/d3dretrace_main.cpp index 15053e4..9878fe3 100644 --- a/retrace/d3dretrace_main.cpp +++ b/retrace/d3dretrace_main.cpp @@ -27,17 +27,26 @@ #include #include "os_string.hpp" + +#include "d3dstate.hpp" #include "retrace.hpp" #include "d3dretrace.hpp" -extern const char *g_szD3D9DllName; +IDirect3DDevice9 * +d3dretrace::pLastDirect3DDevice9 = NULL; void retrace::setUp(void) { if (retrace::debug) { - g_szD3D9DllName = "d3d9d.dll"; + /* + * XXX: D3D9D only works for simple things, it often introduces errors + * on complex traces, or traces which use unofficial D3D9 features. + */ + if (0) { + g_szD3D9DllName = "d3d9d.dll"; + } } } @@ -51,14 +60,24 @@ retrace::addCallbacks(retrace::Retracer &retracer) image::Image * retrace::getSnapshot(void) { - return NULL; + if (!d3dretrace::pLastDirect3DDevice9) { + return NULL; + } + + return d3dstate::getRenderTargetImage(d3dretrace::pLastDirect3DDevice9); } bool retrace::dumpState(std::ostream &os) { - return false; + if (!d3dretrace::pLastDirect3DDevice9) { + return false; + } + + d3dstate::dumpDevice(os, d3dretrace::pLastDirect3DDevice9); + + return true; } @@ -68,6 +87,7 @@ retrace::flushRendering(void) { void retrace::waitForInput(void) { + /* TODO */ } void