check the Ready flag when getting GL_QUERY_RESULT_ARB
authorBrian Paul <brian.paul@tungstengraphics.com>
Sat, 27 Aug 2005 14:04:37 +0000 (14:04 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Sat, 27 Aug 2005 14:04:37 +0000 (14:04 +0000)
src/mesa/main/occlude.c

index 2f57a3cfe2eb3d7b54614efabff2680e2d1a6f1d..e3c591defdd59ec724c34cfd044ded4e468f0044 100644 (file)
@@ -51,6 +51,7 @@ new_query_object(GLenum target, GLuint id)
       q->Id = id;
       q->Result = 0;
       q->Active = GL_FALSE;
+      q->Ready = GL_TRUE;   /* correct, see spec */
    }
    return q;
 }
@@ -297,6 +298,13 @@ _mesa_GetQueryObjectivARB(GLuint id, GLenum pname, GLint *params)
 
    switch (pname) {
       case GL_QUERY_RESULT_ARB:
+         while (!q->Ready) {
+            /* Wait for the query to finish! */
+            /* If using software rendering, the result will always be ready
+             * by time we get here.  Otherwise, we must be using hardware!
+             */
+            ASSERT(ctx->Driver.EndQuery);
+         }
          *params = q->Result;
          break;
       case GL_QUERY_RESULT_AVAILABLE_ARB:
@@ -328,6 +336,13 @@ _mesa_GetQueryObjectuivARB(GLuint id, GLenum pname, GLuint *params)
 
    switch (pname) {
       case GL_QUERY_RESULT_ARB:
+         while (!q->Ready) {
+            /* Wait for the query to finish! */
+            /* If using software rendering, the result will always be ready
+             * by time we get here.  Otherwise, we must be using hardware!
+             */
+            ASSERT(ctx->Driver.EndQuery);
+         }
          *params = q->Result;
          break;
       case GL_QUERY_RESULT_AVAILABLE_ARB: