From: José Fonseca Date: Tue, 10 May 2011 19:36:11 +0000 (+0100) Subject: Take snapshot but don't count glReadPixels as frames. X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=e076b522204334db7f631f2650384c8a463ce345;p=apitrace Take snapshot but don't count glReadPixels as frames. Based on a change by Michel Danzer. --- diff --git a/glretrace.hpp b/glretrace.hpp index 5a55edb..2593040 100644 --- a/glretrace.hpp +++ b/glretrace.hpp @@ -59,6 +59,7 @@ checkGlError(Trace::Call &call); void retrace_call_glx(Trace::Call &call); void retrace_call_wgl(Trace::Call &call); +void snapshot(unsigned call_no); void frame_complete(unsigned call_no); void state_dump(std::ostream &os); diff --git a/glretrace.py b/glretrace.py index 706dbb4..ec9957d 100644 --- a/glretrace.py +++ b/glretrace.py @@ -132,7 +132,7 @@ class GlRetracer(Retracer): if function.name == 'glReadPixels': print ' glFinish();' - print ' glretrace::frame_complete(call.no);' + print ' glretrace::snapshot(call.no);' def call_function(self, function): if function.name == "glViewport": diff --git a/glretrace_main.cpp b/glretrace_main.cpp index abed8ed..a9ef157 100644 --- a/glretrace_main.cpp +++ b/glretrace_main.cpp @@ -106,7 +106,7 @@ checkGlError(Trace::Call &call) { } -static void snapshot(Image::Image &image) { +static void color_snapshot(Image::Image &image) { GLint drawbuffer = double_buffer ? GL_BACK : GL_FRONT; GLint readbuffer = double_buffer ? GL_BACK : GL_FRONT; glGetIntegerv(GL_DRAW_BUFFER, &drawbuffer); @@ -131,40 +131,48 @@ static void snapshot(Image::Image &image) { } -void frame_complete(unsigned call_no) { - ++frame; - - if (drawable && - (snapshot_prefix || compare_prefix)) { - Image::Image *ref = NULL; - if (compare_prefix) { - char filename[PATH_MAX]; - snprintf(filename, sizeof filename, "%s%010u.png", compare_prefix, call_no); - ref = Image::readPNG(filename); - if (!ref) { - return; - } - if (retrace::verbosity >= 0) - std::cout << "Read " << filename << "\n"; +void snapshot(unsigned call_no) { + if (!drawable || + (!snapshot_prefix && !compare_prefix)) { + return; + } + + Image::Image *ref = NULL; + + if (compare_prefix) { + char filename[PATH_MAX]; + snprintf(filename, sizeof filename, "%s%010u.png", compare_prefix, call_no); + ref = Image::readPNG(filename); + if (!ref) { + return; } - - Image::Image src(drawable->width, drawable->height, true); - snapshot(src); - - if (snapshot_prefix) { - char filename[PATH_MAX]; - snprintf(filename, sizeof filename, "%s%010u.png", snapshot_prefix, call_no); - if (src.writePNG(filename) && retrace::verbosity >= 0) { - std::cout << "Wrote " << filename << "\n"; - } + if (retrace::verbosity >= 0) { + std::cout << "Read " << filename << "\n"; } + } - if (ref) { - std::cout << "Snapshot " << call_no << " average precision of " << src.compare(*ref) << " bits\n"; - delete ref; + Image::Image src(drawable->width, drawable->height, true); + color_snapshot(src); + + if (snapshot_prefix) { + char filename[PATH_MAX]; + snprintf(filename, sizeof filename, "%s%010u.png", snapshot_prefix, call_no); + if (src.writePNG(filename) && retrace::verbosity >= 0) { + std::cout << "Wrote " << filename << "\n"; } } + if (ref) { + std::cout << "Snapshot " << call_no << " average precision of " << src.compare(*ref) << " bits\n"; + delete ref; + } +} + + +void frame_complete(unsigned call_no) { + ++frame; + + snapshot(call_no); }