]> git.cworth.org Git - apitrace/blobdiff - retrace/retrace_main.cpp
d3dretrace: Prevent ScopedAllocator::alloc<D3DPRESENT_PARAMETERS> clash.
[apitrace] / retrace / retrace_main.cpp
index e3e74f84cf20d979928b6fd704593939f22305ba..a59ee9ae81f3f4aecbdd8b6501a77eaf3f05bffb 100644 (file)
@@ -79,6 +79,11 @@ frameComplete(trace::Call &call) {
 }
 
 
+static Dumper defaultDumper;
+
+Dumper *dumper = &defaultDumper;
+
+
 /**
  * Take/compare snapshots.
  */
@@ -99,7 +104,7 @@ takeSnapshot(unsigned call_no) {
         }
     }
 
-    image::Image *src = getSnapshot();
+    image::Image *src = dumper->getSnapshot();
     if (!src) {
         return;
     }
@@ -162,7 +167,7 @@ retraceCall(trace::Call *call) {
         takeSnapshot(call->no);
 
     if (call->no >= dumpStateCallNo &&
-        dumpState(std::cout)) {
+        dumper->dumpState(std::cout)) {
         exit(0);
     }
 }
@@ -540,6 +545,13 @@ longOptions[] = {
     {0, 0, 0, 0}
 };
 
+
+static void exceptionCallback(void)
+{
+    std::cerr << retrace::callNo << ": error: caught an unhandled exception\n";
+}
+
+
 extern "C"
 int main(int argc, char **argv)
 {
@@ -640,9 +652,10 @@ int main(int argc, char **argv)
         retrace::profiler.setup(retrace::profilingCpuTimes, retrace::profilingGpuTimes, retrace::profilingPixelsDrawn);
     }
 
+    os::setExceptionCallback(exceptionCallback);
+
     for (i = optind; i < argc; ++i) {
         if (!retrace::parser.open(argv[i])) {
-            std::cerr << "error: failed to open " << argv[i] << "\n";
             return 1;
         }
 
@@ -650,6 +663,8 @@ int main(int argc, char **argv)
 
         retrace::parser.close();
     }
+    
+    os::resetExceptionCallback();
 
     // XXX: X often hangs on XCloseDisplay
     //retrace::cleanUp();