]> git.cworth.org Git - apitrace/blobdiff - retrace/d3dretrace_main.cpp
retrace: More useful warnings for object mismatches.
[apitrace] / retrace / d3dretrace_main.cpp
index 15053e4d1369f953b8f00d6b7fe115ad8bb681b2..4bd4b8013a924820482d6ebdbf7a2eb9ff8c6e6d 100644 (file)
 #include <string.h>
 
 #include "os_string.hpp"
+
+#include "d3d9state.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";
+        }
     }
 }
 
@@ -45,20 +54,30 @@ retrace::setUp(void) {
 void
 retrace::addCallbacks(retrace::Retracer &retracer)
 {
-    retracer.addCallbacks(d3dretrace::d3d9_callbacks);
+    retracer.addCallbacks(d3dretrace::d3d_callbacks);
 }
 
 
 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