]> git.cworth.org Git - apitrace/blobdiff - retrace/d3dretrace_main.cpp
Merge branch 'master' into dxva
[apitrace] / retrace / d3dretrace_main.cpp
index 15053e4d1369f953b8f00d6b7fe115ad8bb681b2..9878fe3c87b059690527f6c6e44f523d72f4880d 100644 (file)
 #include <string.h>
 
 #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