X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=glretrace_main.cpp;h=4e4b8aee8da4cbf942dc4ac8ca1dd3ddb6805d2d;hb=93f0e3f5b7fc212bc993af407dacac24cdab5210;hp=cd35889c9dff873303dd27d26274829d296e664d;hpb=757b2b61e1781fbc903413f8703628468fd6c2f9;p=apitrace diff --git a/glretrace_main.cpp b/glretrace_main.cpp index cd35889..4e4b8ae 100644 --- a/glretrace_main.cpp +++ b/glretrace_main.cpp @@ -38,7 +38,6 @@ namespace glretrace { bool double_buffer = true; bool insideGlBeginEnd = false; Trace::Parser parser; -glws::WindowSystem *ws = NULL; glws::Visual *visual = NULL; glws::Drawable *drawable = NULL; glws::Context *context = NULL; @@ -61,46 +60,42 @@ checkGlError(Trace::Call &call) { return; } - if (retrace::verbosity == 0) { - std::cout << call; - std::cout.flush(); - } + std::ostream & os = retrace::warning(call); - std::cerr << call.no << ": "; - std::cerr << "warning: glGetError("; - std::cerr << call.name(); - std::cerr << ") = "; + os << "glGetError("; + os << call.name(); + os << ") = "; switch (error) { case GL_INVALID_ENUM: - std::cerr << "GL_INVALID_ENUM"; + os << "GL_INVALID_ENUM"; break; case GL_INVALID_VALUE: - std::cerr << "GL_INVALID_VALUE"; + os << "GL_INVALID_VALUE"; break; case GL_INVALID_OPERATION: - std::cerr << "GL_INVALID_OPERATION"; + os << "GL_INVALID_OPERATION"; break; case GL_STACK_OVERFLOW: - std::cerr << "GL_STACK_OVERFLOW"; + os << "GL_STACK_OVERFLOW"; break; case GL_STACK_UNDERFLOW: - std::cerr << "GL_STACK_UNDERFLOW"; + os << "GL_STACK_UNDERFLOW"; break; case GL_OUT_OF_MEMORY: - std::cerr << "GL_OUT_OF_MEMORY"; + os << "GL_OUT_OF_MEMORY"; break; case GL_INVALID_FRAMEBUFFER_OPERATION: - std::cerr << "GL_INVALID_FRAMEBUFFER_OPERATION"; + os << "GL_INVALID_FRAMEBUFFER_OPERATION"; break; case GL_TABLE_TOO_LARGE: - std::cerr << "GL_TABLE_TOO_LARGE"; + os << "GL_TABLE_TOO_LARGE"; break; default: - std::cerr << error; + os << error; break; } - std::cerr << "\n"; + os << "\n"; } /** @@ -194,28 +189,18 @@ void frame_complete(unsigned call_no) { static void display(void) { + retrace::Retracer retracer; + + retracer.addCallbacks(gl_callbacks); + retracer.addCallbacks(glx_callbacks); + retracer.addCallbacks(wgl_callbacks); + retracer.addCallbacks(cgl_callbacks); + startTime = OS::GetTime(); Trace::Call *call; while ((call = parser.parse_call())) { - const char *name = call->name(); - - if (retrace::verbosity >= 1) { - std::cout << *call; - std::cout.flush(); - } - - if (name[0] == 'C' && name[1] == 'G' && name[2] == 'L') { - glretrace::retrace_call_cgl(*call); - } - else if (name[0] == 'w' && name[1] == 'g' && name[2] == 'l') { - glretrace::retrace_call_wgl(*call); - } - else if (name[0] == 'g' && name[1] == 'l' && name[2] == 'X') { - glretrace::retrace_call_glx(*call); - } else { - retrace::retrace_call(*call); - } + retracer.retrace(*call); if (!insideGlBeginEnd && drawable && context && @@ -241,7 +226,7 @@ static void display(void) { } if (wait) { - while (ws->processEvents()) {} + while (glws::processEvents()) {} } else { exit(0); } @@ -281,6 +266,7 @@ int main(int argc, char **argv) } else if (!strcmp(arg, "-b")) { benchmark = true; retrace::verbosity = -1; + glws::debug = false; } else if (!strcmp(arg, "-c")) { compare_prefix = argv[++i]; if (snapshot_frequency == FREQUENCY_NEVER) { @@ -331,8 +317,8 @@ int main(int argc, char **argv) } } - ws = glws::createNativeWindowSystem(); - visual = ws->createVisual(double_buffer); + glws::init(); + visual = glws::createVisual(double_buffer); for ( ; i < argc; ++i) { if (!parser.open(argv[i])) { @@ -344,6 +330,9 @@ int main(int argc, char **argv) parser.close(); } + + delete visual; + glws::cleanup(); return 0; }