Clear an rgba color buffer without channel masking.
{
const GLint x = ctx->DrawBuffer->_Xmin;
const GLint y = ctx->DrawBuffer->_Ymin;
const GLint height = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin;
const GLint width = ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin;
GLubyte clear8[4];
GLushort clear16[4];
GLvoid *clearVal;
GLint i;
ASSERT(ctx->Visual.rgbMode);
ASSERT(ctx->Color.ColorMask[0] &&
ctx->Color.ColorMask[1] &&
ctx->Color.ColorMask[2] &&
ctx->Color.ColorMask[3]);
ASSERT(rb->PutMonoRow);
switch (rb->DataType) {
case GL_UNSIGNED_BYTE:
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:
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:
clearVal = ctx->Color.ClearColor;
break;
default:
_mesa_problem(ctx, "Bad rb DataType in clear_color_buffer");
return;
}
for (i = 0; i < height; i++) {
rb->PutMonoRow(ctx, rb, width, x, y + i, clearVal, NULL);
}
}