check for framebuffer completeness, code clean-up
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 28 Sep 2005 15:46:46 +0000 (15:46 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 28 Sep 2005 15:46:46 +0000 (15:46 +0000)
src/mesa/main/accum.c
src/mesa/main/framebuffer.c

index 76821761833da6188938efa2ed420db84763587e..a659e8dbdd8fcab68ea3bac48faeefeed630499e 100644 (file)
@@ -55,7 +55,6 @@ void GLAPIENTRY
 _mesa_Accum( GLenum op, GLfloat value )
 {
    GET_CURRENT_CONTEXT(ctx);
-   GLuint xpos, ypos, width, height;
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
    switch (op) {
@@ -84,29 +83,21 @@ _mesa_Accum( GLenum op, GLfloat value )
    }
 
    if (ctx->NewState)
-      _mesa_update_state( ctx );
+      _mesa_update_state(ctx);
 
-   if (ctx->RenderMode != GL_RENDER) {
-      /* no-op */
+   if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
+      _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
+                  "glAccum(incomplete framebuffer)");
       return;
    }
 
-   /* Determine region to operate upon. */
-   if (ctx->Scissor.Enabled) {
-      xpos = ctx->Scissor.X;
-      ypos = ctx->Scissor.Y;
-      width = ctx->Scissor.Width;
-      height = ctx->Scissor.Height;
+   if (ctx->RenderMode == GL_RENDER) {
+      GLint x = ctx->DrawBuffer->_Xmin;
+      GLint y = ctx->DrawBuffer->_Ymin;
+      GLint width =  ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin;
+      GLint height = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin;
+      ctx->Driver.Accum(ctx, op, value, x, y, width, height);
    }
-   else {
-      /* whole window */
-      xpos = 0;
-      ypos = 0;
-      width = ctx->DrawBuffer->Width;
-      height = ctx->DrawBuffer->Height;
-   }
-
-   ctx->Driver.Accum( ctx, op, value, xpos, ypos, width, height );
 }
 
 
index e2cb009ff1092b22dba29c1ca52f6cb1c5d6edd5..5fd264eae6cde07fb0ba03569d3dffab90c4f8cd 100644 (file)
@@ -144,6 +144,7 @@ _mesa_initialize_framebuffer(struct gl_framebuffer *fb, const GLvisual *visual)
    }
 
    fb->Delete = _mesa_destroy_framebuffer;
+   fb->_Status = GL_FRAMEBUFFER_COMPLETE_EXT;
 
    compute_depth_max(fb);
 }