* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
+/** XXX This file should be named s_clear.c */
#include "glheader.h"
#include "colormac.h"
#include "macros.h"
#include "imports.h"
#include "mtypes.h"
-#include "fbobject.h"
#include "s_accum.h"
#include "s_context.h"
const GLint y = ctx->DrawBuffer->_Ymin;
const GLint height = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin;
const GLint width = ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin;
- GLuint span[MAX_WIDTH];
- GLubyte mask[MAX_WIDTH];
- GLint i, j;
+ GLint i;
ASSERT(!ctx->Visual.rgbMode);
+ ASSERT(rb->PutRow);
+ ASSERT(rb->DataType == GL_UNSIGNED_INT);
- MEMSET( mask, 1, width );
for (i = 0; i < height;i++) {
+ GLuint span[MAX_WIDTH];
+ GLint j;
for (j = 0; j < width;j++) {
span[j] = ctx->Color.ClearIndex;
}
_swrast_mask_ci_array(ctx, rb, width, x, y + i, span);
- ASSERT(rb->PutRow);
- ASSERT(rb->DataType == GL_UNSIGNED_INT);
- rb->PutRow(ctx, rb, width, x, y + i, span, mask);
+ rb->PutRow(ctx, rb, width, x, y + i, span, NULL);
}
}
switch (rb->DataType) {
case GL_UNSIGNED_BYTE:
- clear8[0] = FLOAT_TO_UBYTE(ctx->Color.ClearColor[0]);
- clear8[1] = FLOAT_TO_UBYTE(ctx->Color.ClearColor[1]);
- clear8[2] = FLOAT_TO_UBYTE(ctx->Color.ClearColor[2]);
- clear8[3] = FLOAT_TO_UBYTE(ctx->Color.ClearColor[3]);
+ UNCLAMPED_FLOAT_TO_UBYTE(clear8[0], ctx->Color.ClearColor[0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(clear8[1], ctx->Color.ClearColor[1]);
+ UNCLAMPED_FLOAT_TO_UBYTE(clear8[2], ctx->Color.ClearColor[2]);
+ UNCLAMPED_FLOAT_TO_UBYTE(clear8[3], ctx->Color.ClearColor[3]);
clearVal = clear8;
break;
case GL_UNSIGNED_SHORT:
- clear16[0] = FLOAT_TO_USHORT(ctx->Color.ClearColor[0]);
- clear16[1] = FLOAT_TO_USHORT(ctx->Color.ClearColor[1]);
- clear16[2] = FLOAT_TO_USHORT(ctx->Color.ClearColor[2]);
- clear16[3] = FLOAT_TO_USHORT(ctx->Color.ClearColor[3]);
+ UNCLAMPED_FLOAT_TO_USHORT(clear16[0], ctx->Color.ClearColor[0]);
+ UNCLAMPED_FLOAT_TO_USHORT(clear16[1], ctx->Color.ClearColor[1]);
+ UNCLAMPED_FLOAT_TO_USHORT(clear16[2], ctx->Color.ClearColor[2]);
+ UNCLAMPED_FLOAT_TO_USHORT(clear16[3], ctx->Color.ClearColor[3]);
clearVal = clear16;
break;
case GL_FLOAT:
/**
* Called via the device driver's ctx->Driver.Clear() function if the
* device driver can't clear one or more of the buffers itself.
- * \param mask bitwise-OR of DD_*_BIT flags.
+ * \param mask bitfield of BUFER_BIT_* values indicating which renderbuffers
+ * are to be cleared.
* \param all if GL_TRUE, clear whole buffer, else clear specified region.
*/
void
clear_color_buffers(ctx);
}
if (mask & BUFFER_BIT_DEPTH) {
- struct gl_renderbuffer *rb
- = ctx->DrawBuffer->Attachment[BUFFER_DEPTH].Renderbuffer;
- _swrast_clear_depth_buffer(ctx, rb);
+ _swrast_clear_depth_buffer(ctx, ctx->DrawBuffer->_DepthBuffer);
}
if (mask & BUFFER_BIT_ACCUM) {
- struct gl_renderbuffer *rb
- = ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer;
- _swrast_clear_accum_buffer(ctx, rb);
+ _swrast_clear_accum_buffer(ctx,
+ ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer);
}
if (mask & BUFFER_BIT_STENCIL) {
- struct gl_renderbuffer *rb
- = ctx->DrawBuffer->Attachment[BUFFER_STENCIL].Renderbuffer;
- _swrast_clear_stencil_buffer(ctx, rb);
+ _swrast_clear_stencil_buffer(ctx, ctx->DrawBuffer->_StencilBuffer);
}
}