#include <string.h>
#include "os_string.hpp"
+
+#include "d3dstate.hpp"
#include "retrace.hpp"
#include "d3dretrace.hpp"
-namespace d3dretrace {
-
-static void display(void) {
- retrace::Retracer retracer;
-
- retracer.addCallbacks(d3d9_callbacks);
+IDirect3DDevice9 *
+d3dretrace::pLastDirect3DDevice9 = NULL;
- trace::Call *call;
- while ((call = retrace::parser.parse_call())) {
- retracer.retrace(*call);
-
- delete call;
+void
+retrace::setUp(void) {
+ if (retrace::debug) {
+ /*
+ * 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";
+ }
}
-
- exit(0);
}
-static void usage(void) {
- std::cout <<
- "Usage: d3dretrace [OPTION] TRACE\n"
- "Replay TRACE.\n"
- "\n"
- " -v increase output verbosity\n"
- ;
+void
+retrace::addCallbacks(retrace::Retracer &retracer)
+{
+ retracer.addCallbacks(d3dretrace::d3d9_callbacks);
}
-extern "C"
-int main(int argc, char **argv)
-{
+image::Image *
+retrace::getSnapshot(void) {
+ if (!d3dretrace::pLastDirect3DDevice9) {
+ return NULL;
+ }
- int i;
- for (i = 1; i < argc; ++i) {
- const char *arg = argv[i];
+ return d3dstate::getRenderTargetImage(d3dretrace::pLastDirect3DDevice9);
+}
- if (arg[0] != '-') {
- break;
- }
- if (!strcmp(arg, "--")) {
- break;
- } else if (!strcmp(arg, "--help")) {
- usage();
- return 0;
- } else if (!strcmp(arg, "-v")) {
- ++retrace::verbosity;
- } else {
- std::cerr << "error: unknown option " << arg << "\n";
- usage();
- return 1;
- }
+bool
+retrace::dumpState(std::ostream &os)
+{
+ if (!d3dretrace::pLastDirect3DDevice9) {
+ return false;
}
- for ( ; i < argc; ++i) {
- if (!retrace::parser.open(argv[i])) {
- std::cerr << "error: failed to open " << argv[i] << "\n";
- return 1;
- }
+ d3dstate::dumpDevice(os, d3dretrace::pLastDirect3DDevice9);
- display();
+ return true;
+}
- retrace::parser.close();
- }
- return 0;
+void
+retrace::flushRendering(void) {
+}
+
+void
+retrace::waitForInput(void) {
+ /* TODO */
}
-} /* namespace glretrace */
+void
+retrace::cleanUp(void) {
+}