actually use new glClear code
authorBrian <brian.paul@tungstengraphics.com>
Wed, 20 Jun 2007 19:10:48 +0000 (13:10 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Wed, 20 Jun 2007 19:10:48 +0000 (13:10 -0600)
src/mesa/drivers/x11/xm_dd.c
src/mesa/pipe/softpipe/sp_clear.c
src/mesa/state_tracker/st_draw.c
src/mesa/state_tracker/st_draw.h

index eb59d1d05ef9c2d1dadc4acf381853bb6fc3e383..57254148561a6950ae880d3a395825315139f83a 100644 (file)
@@ -55,6 +55,8 @@
 
 #include "pipe/softpipe/sp_context.h"
 #include "state_tracker/st_public.h"
+#include "state_tracker/st_context.h"
+#include "state_tracker/st_draw.h"
 
 
 /*
@@ -393,6 +395,7 @@ clear_buffers(GLcontext *ctx, GLbitfield buffers)
 
       /* we can't handle color or index masking */
       if (*colorMask == 0xffffffff && ctx->Color.IndexMask == 0xffffffff) {
+#if 0
          if (buffers & BUFFER_BIT_FRONT_LEFT) {
             /* clear front color buffer */
             struct gl_renderbuffer *frontRb
@@ -416,6 +419,15 @@ clear_buffers(GLcontext *ctx, GLbitfield buffers)
                buffers &= ~BUFFER_BIT_BACK_LEFT;
             }
          }
+#else
+         /* Clear with state-tracker/pipe interface */
+         struct st_context *st = st_context(ctx);
+         GLboolean color = (buffers & (BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT)) ? 1: 0;
+         GLboolean depth = (buffers & BUFFER_BIT_DEPTH) ? 1 : 0;
+         GLboolean stencil = (buffers & BUFFER_BIT_STENCIL) ? 1 : 0;
+         GLboolean accum = (buffers & BUFFER_BIT_ACCUM) ? 1 : 0;
+         st_clear(st, color, depth, stencil, accum);
+#endif
       }
    }
    if (buffers)
index 536f0d39243ef68f9c65d7af0ed689281fbb0aaf..e83bc053ef747a35915dfaed5df50c7d4ab8ba8c 100644 (file)
@@ -40,14 +40,14 @@ void
 softpipe_clear(struct pipe_context *pipe, GLboolean color, GLboolean depth,
                GLboolean stencil, GLboolean accum)
 {
-   struct softpipe_context *softpipe = softpipe_context(pipe);
+   const struct softpipe_context *softpipe = softpipe_context(pipe);
+   const GLint x = softpipe->scissor.minx;
+   const GLint y = softpipe->scissor.miny;
+   const GLint w = softpipe->scissor.maxx - x;
+   const GLint h = softpipe->scissor.maxy - y;
 
    if (color) {
       GLuint i;
-      const GLint x = softpipe->scissor.minx;
-      const GLint y = softpipe->scissor.miny;
-      const GLint w = softpipe->scissor.maxx - x;
-      const GLint h = softpipe->scissor.maxy - y;
       GLubyte clr[4];
 
       UNCLAMPED_FLOAT_TO_UBYTE(clr[0], softpipe->clear_color.color[0]);
index 1f6c261bc24633786b4a9d704305974a75627ed3..55b98629dbdd8b7dc2aa9714c433a3eb84362226 100644 (file)
@@ -105,3 +105,17 @@ void st_destroy_draw( struct st_context *st )
    /* Nothing to do. 
     */
 }
+
+
+/** XXX temporary here */
+void
+st_clear(struct st_context *st, GLboolean color, GLboolean depth,
+         GLboolean stencil, GLboolean accum)
+{
+   /* Validate driver and pipe state:
+    */
+   st_validate_state( st );
+
+   st->pipe->clear(st->pipe, color, depth, stencil, accum);
+}
+
index f51059706adde2ace2ed1acae2a8a4a07a3feda2..7a3ba521300773403547b450cc58ded0a378b10f 100644 (file)
@@ -37,4 +37,8 @@
 void st_init_draw( struct st_context *st );
 void st_destroy_draw( struct st_context *st );
 
+/** XXX temporary here */
+void st_clear(struct st_context *st, GLboolean color, GLboolean depth,
+              GLboolean stencil, GLboolean accum);
+
 #endif