X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=glretrace_main.cpp;h=c2ca664239500d76d7d0dc2390533d80139a99f7;hb=ddbf8c0065ce1b7502e3e127a846add476ab7a4c;hp=3bf9de890707ebce4f1582b9f8595801a57d6c14;hpb=8842c2353d673b45d34c163e444d6ecd068d255c;p=apitrace diff --git a/glretrace_main.cpp b/glretrace_main.cpp index 3bf9de8..c2ca664 100644 --- a/glretrace_main.cpp +++ b/glretrace_main.cpp @@ -27,6 +27,7 @@ #include #include "os_string.hpp" +#include "os_time.hpp" #include "image.hpp" #include "retrace.hpp" #include "glproc.hpp" @@ -40,7 +41,7 @@ bool double_buffer = true; bool insideGlBeginEnd = false; trace::Parser parser; glws::Profile defaultProfile = glws::PROFILE_COMPAT; -glws::Visual *visual = NULL; +glws::Visual *visual[glws::PROFILE_MAX]; glws::Drawable *drawable = NULL; glws::Context *context = NULL; @@ -118,6 +119,11 @@ updateDrawable(int width, int height) { return; } + // Ignore zero area viewports + if (width == 0 || height == 0) { + return; + } + // Check for bound framebuffer last, as this may have a performance impact. GLint draw_framebuffer = 0; glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &draw_framebuffer); @@ -225,7 +231,7 @@ static void display(void) { glFlush(); long long endTime = os::getTime(); - float timeInterval = (endTime - startTime) * 1.0E-6; + float timeInterval = (endTime - startTime) * (1.0 / os::timeFrequency); if (retrace::verbosity >= -1) { std::cout << @@ -254,7 +260,7 @@ static void usage(void) { " -sb use a single buffer visual\n" " -s PREFIX take snapshots; `-` for PNM stdout output\n" " -S FREQUENCY snapshot frequency: frame (default), framebuffer, or draw\n" - " -v verbose output\n" + " -v increase output verbosity\n" " -D CALLNO dump state at specific call no\n" " -w wait on final frame\n"; } @@ -330,7 +336,10 @@ int main(int argc, char **argv) } glws::init(); - visual = glws::createVisual(double_buffer); + visual[glws::PROFILE_COMPAT] = glws::createVisual(double_buffer, glws::PROFILE_COMPAT); + visual[glws::PROFILE_CORE] = glws::createVisual(double_buffer, glws::PROFILE_CORE); + visual[glws::PROFILE_ES1] = glws::createVisual(double_buffer, glws::PROFILE_ES1); + visual[glws::PROFILE_ES2] = glws::createVisual(double_buffer, glws::PROFILE_ES2); for ( ; i < argc; ++i) { if (!parser.open(argv[i])) { @@ -342,8 +351,11 @@ int main(int argc, char **argv) parser.close(); } - - delete visual; + + for (int n = 0; n < glws::PROFILE_MAX; n++) { + delete visual[n]; + } + glws::cleanup(); return 0;