X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fd3dretrace_main.cpp;h=9878fe3c87b059690527f6c6e44f523d72f4880d;hb=c63617dd4ea8a212e56b79e845917915e36776d2;hp=133f3a7ae483678a88b13728241bc4c63e20a508;hpb=9d27a54b0381610c30964880a5fdd4c27bb6e732;p=apitrace diff --git a/retrace/d3dretrace_main.cpp b/retrace/d3dretrace_main.cpp index 133f3a7..9878fe3 100644 --- a/retrace/d3dretrace_main.cpp +++ b/retrace/d3dretrace_main.cpp @@ -27,77 +27,69 @@ #include #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) { +}