Emit a warning when the window size cannot be inferred.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Tue, 25 Oct 2011 08:56:15 +0000 (09:56 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Tue, 25 Oct 2011 08:57:20 +0000 (09:57 +0100)
Issue 47.

glretrace.hpp
glretrace.py
glretrace_cgl.cpp
glretrace_glx.cpp
glretrace_main.cpp
glretrace_wgl.cpp

index 3a44f2c..b9d0f1a 100644 (file)
@@ -68,7 +68,7 @@ extern const retrace::Entry glx_callbacks[];
 extern const retrace::Entry wgl_callbacks[];
 
 void snapshot(unsigned call_no);
-void frame_complete(unsigned call_no);
+void frame_complete(Trace::Call &call);
 
 void updateDrawable(int width, int height);
 
index e80fedb..ea307a6 100644 (file)
@@ -209,7 +209,7 @@ class GlRetracer(Retracer):
             print '        glretrace::snapshot(call.no - 1);'
             print '    }'
         if function.name == 'glFrameTerminatorGREMEDY':
-            print '    glretrace::frame_complete(call.no);'
+            print '    glretrace::frame_complete(call);'
             return
 
         Retracer.retrace_function_body(self, function)
@@ -217,7 +217,7 @@ class GlRetracer(Retracer):
         # Post-snapshots
         if function.name in ('glFlush', 'glFinish'):
             print '    if (!glretrace::double_buffer) {'
-            print '        glretrace::frame_complete(call.no);'
+            print '        glretrace::frame_complete(call);'
             print '    }'
         if is_draw_array or is_draw_elements or is_misc_draw:
             print '    if (glretrace::snapshot_frequency == glretrace::FREQUENCY_DRAW) {'
index cfa9d20..d5238a8 100644 (file)
@@ -107,7 +107,7 @@ static void retrace_CGLFlushDrawable(Trace::Call &call) {
             glFlush();
         }
 
-        frame_complete(call.no);
+        frame_complete(call);
     }
 }
 
index 8e2e469..7f635ee 100644 (file)
@@ -95,7 +95,7 @@ static void retrace_glXMakeCurrent(Trace::Call &call) {
     if (drawable && context) {
         glFlush();
         if (!double_buffer) {
-            frame_complete(call.no);
+            frame_complete(call);
         }
     }
 
@@ -122,7 +122,7 @@ static void retrace_glXDestroyContext(Trace::Call &call) {
 }
 
 static void retrace_glXSwapBuffers(Trace::Call &call) {
-    frame_complete(call.no);
+    frame_complete(call);
     if (double_buffer) {
         drawable->swapBuffers();
     } else {
@@ -149,7 +149,7 @@ static void retrace_glXMakeContextCurrent(Trace::Call &call) {
     if (drawable && context) {
         glFlush();
         if (!double_buffer) {
-            frame_complete(call.no);
+            frame_complete(call);
         }
     }
 
index 4e4b8ae..89ead9d 100644 (file)
@@ -110,7 +110,8 @@ updateDrawable(int width, int height) {
         return;
     }
 
-    if (width  <= glretrace::drawable->width &&
+    if (drawable->visible &&
+        width  <= glretrace::drawable->width &&
         height <= glretrace::drawable->height) {
         return;
     }
@@ -178,12 +179,20 @@ void snapshot(unsigned call_no) {
 }
 
 
-void frame_complete(unsigned call_no) {
+void frame_complete(Trace::Call &call) {
     ++frame;
 
+    if (!drawable) {
+        return;
+    }
+
+    if (!drawable->visible) {
+        retrace::warning(call) << "could not infer drawable size (glViewport never called)\n";
+    }
+
     if (snapshot_frequency == FREQUENCY_FRAME ||
         snapshot_frequency == FREQUENCY_FRAMEBUFFER) {
-        snapshot(call_no);
+        snapshot(call.no);
     }
 }
 
index 8f6a624..34b48d0 100644 (file)
@@ -67,7 +67,7 @@ static void retrace_wglMakeCurrent(Trace::Call &call) {
     if (drawable && context) {
         glFlush();
         if (!double_buffer) {
-            frame_complete(call.no);
+            frame_complete(call);
         }
     }
     
@@ -98,7 +98,7 @@ static void retrace_wglSetPixelFormat(Trace::Call &call) {
 }
 
 static void retrace_wglSwapBuffers(Trace::Call &call) {
-    frame_complete(call.no);
+    frame_complete(call);
     if (double_buffer) {
         drawable->swapBuffers();
     } else {