/** * Clear the front/back/left/right/aux color buffers. * This function is usually only called if the device driver can't * clear its own color buffers for some reason (such as with masking). */ static void clear_color_buffers(GLcontext *ctx) { GLboolean masking; GLuint buf; if (ctx->Visual.rgbMode) { if (ctx->Color.ColorMask[0] && ctx->Color.ColorMask[1] && ctx->Color.ColorMask[2] && ctx->Color.ColorMask[3]) { masking = GL_FALSE; } else { masking = GL_TRUE; } } else { struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[0]; const GLuint indexMask = (1 << _mesa_get_format_bits(rb->Format, GL_INDEX_BITS)) - 1; if ((ctx->Color.IndexMask & indexMask) == indexMask) { masking = GL_FALSE; } else { masking = GL_TRUE; } } for (buf = 0; buf < ctx->DrawBuffer->_NumColorDrawBuffers; buf++) { struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[buf]; if (ctx->Visual.rgbMode) { if (masking) { clear_rgba_buffer_with_masking(ctx, rb); } else { clear_rgba_buffer(ctx, rb); } } else { if (masking) { clear_ci_buffer_with_masking(ctx, rb); } else { clear_ci_buffer(ctx, rb); } } } }
/** * Clear the front/back/left/right/aux color buffers. * This function is usually only called if the device driver can't * clear its own color buffers for some reason (such as with masking). */ static void clear_color_buffers(GLcontext *ctx) { GLboolean masking; GLuint i; if (ctx->Visual.rgbMode) { if (ctx->Color.ColorMask[0] && ctx->Color.ColorMask[1] && ctx->Color.ColorMask[2] && ctx->Color.ColorMask[3]) { masking = GL_FALSE; } else { masking = GL_TRUE; } } else { struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[0][0]; const GLuint indexBits = (1 << rb->IndexBits) - 1; if ((ctx->Color.IndexMask & indexBits) == indexBits) { masking = GL_FALSE; } else { masking = GL_TRUE; } } for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers[0]; i++) { struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[0][i]; if (ctx->Visual.rgbMode) { if (masking) { clear_rgba_buffer_with_masking(ctx, rb); } else { clear_rgba_buffer(ctx, rb); } } else { if (masking) { clear_ci_buffer_with_masking(ctx, rb); } else { clear_ci_buffer(ctx, rb); } } } }