fix precision problem in depth clearing (bug 4395)
authorBrian Paul <brian.paul@tungstengraphics.com>
Thu, 8 Sep 2005 13:55:05 +0000 (13:55 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Thu, 8 Sep 2005 13:55:05 +0000 (13:55 +0000)
src/mesa/swrast/s_depth.c

index 9f17bb17aa31c958c41d2f66819b9373dc0084a9..a80b8ec1209c089972b1030d4f5662869f27bbe1 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Mesa 3-D graphics library
- * Version:  6.3
+ * Version:  6.5
  *
  * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
  *
@@ -1273,13 +1273,11 @@ _swrast_read_depth_span_float( GLcontext *ctx, struct gl_renderbuffer *rb,
 
 /**
  * Clear the depth buffer.
- * XXX this is no longer a swrast function!!!
  */
 void
 _swrast_clear_depth_buffer( GLcontext *ctx, struct gl_renderbuffer *rb )
 {
-   const GLuint clearValue
-      = (GLuint) (ctx->Depth.Clear * ctx->DrawBuffer->_DepthMaxF);
+   GLuint clearValue;
    GLint x, y, width, height;
 
    if (!rb || !ctx->Depth.Mask) {
@@ -1287,6 +1285,14 @@ _swrast_clear_depth_buffer( GLcontext *ctx, struct gl_renderbuffer *rb )
       return;
    }
 
+   /* compute integer clearing value */
+   if (ctx->Depth.Clear == 1.0) {
+      clearValue = ctx->DrawBuffer->_DepthMax;
+   }
+   else {
+      clearValue = (GLuint) (ctx->Depth.Clear * ctx->DrawBuffer->_DepthMaxF);
+   }
+
    assert(rb->_BaseFormat == GL_DEPTH_COMPONENT);
 
    /* compute region to clear */