Don't pass x/y/width/height to ctx->Driver.Accum().
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 18 Oct 2006 18:35:09 +0000 (18:35 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 18 Oct 2006 18:35:09 +0000 (18:35 +0000)
Compute the region after we've locked (and possibly updated the buffer's size).
Same thing is needed for ctx->Driver.Clear().

src/mesa/main/accum.c
src/mesa/main/dd.h
src/mesa/swrast/s_accum.c
src/mesa/swrast/swrast.h

index a6e4226..2345695 100644 (file)
@@ -94,11 +94,7 @@ _mesa_Accum( GLenum op, GLfloat value )
    }
 
    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);
+      ctx->Driver.Accum(ctx, op, value);
    }
 }
 
index 716c13c..a1999ac 100644 (file)
@@ -118,10 +118,9 @@ struct dd_function_table {
     */
    /*@{*/
    /**
-    * Execute glAccum command within the given scissor region.
+    * Execute glAccum command.
     */
-   void (*Accum)( GLcontext *ctx, GLenum op, GLfloat value,
-                 GLint xpos, GLint ypos, GLint width, GLint height );
+   void (*Accum)( GLcontext *ctx, GLenum op, GLfloat value );
    /*@}*/
 
 
index 0b8ad00..69e9404 100644 (file)
@@ -541,12 +541,10 @@ accum_return(GLcontext *ctx, GLfloat value,
  * Software fallback for glAccum.
  */
 void
-_swrast_Accum( GLcontext *ctx, GLenum op, GLfloat value,
-              GLint xpos, GLint ypos,
-              GLint width, GLint height )
-
+_swrast_Accum(GLcontext *ctx, GLenum op, GLfloat value)
 {
    SWcontext *swrast = SWRAST_CONTEXT(ctx);
+   GLint xpos, ypos, width, height;
 
    if (SWRAST_CONTEXT(ctx)->NewState)
       _swrast_validate_derived( ctx );
@@ -558,6 +556,14 @@ _swrast_Accum( GLcontext *ctx, GLenum op, GLfloat value,
 
    RENDER_START(swrast, ctx);
 
+   /* Compute region after calling RENDER_START so that we know the
+    * drawbuffer's size/bounds are up to date.
+    */
+   xpos = ctx->DrawBuffer->_Xmin;
+   ypos = ctx->DrawBuffer->_Ymin;
+   width =  ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin;
+   height = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin;
+
    switch (op) {
       case GL_ADD:
          if (value != 0.0F) {
index 6d384fb..04bd01a 100644 (file)
@@ -134,9 +134,7 @@ _swrast_Clear( GLcontext *ctx, GLbitfield mask, GLboolean all,
               GLint x, GLint y, GLint width, GLint height );
 
 extern void
-_swrast_Accum( GLcontext *ctx, GLenum op,
-              GLfloat value, GLint xpos, GLint ypos,
-              GLint width, GLint height );
+_swrast_Accum(GLcontext *ctx, GLenum op, GLfloat value);