/* * Clear the front and/or back color buffers. Also clear the alpha * buffer(s) if present. */ static void clear_color_buffers( GLcontext *ctx ) { if (ctx->Color.SWmasking) { clear_color_buffer_with_masking( ctx ); } else { GLint x = ctx->Buffer->Xmin; GLint y = ctx->Buffer->Ymin; GLint height = ctx->Buffer->Ymax - ctx->Buffer->Ymin + 1; GLint width = ctx->Buffer->Xmax - ctx->Buffer->Xmin + 1; (*ctx->Driver.Clear)( ctx, !ctx->Scissor.Enabled, x, y, width, height ); if (ctx->RasterMask & ALPHABUF_BIT) { /* front and/or back alpha buffers will be cleared here */ gl_clear_alpha_buffers( ctx ); } } if (ctx->RasterMask & FRONT_AND_BACK_BIT) { /*** Also clear the back buffer ***/ (*ctx->Driver.SetBuffer)( ctx, GL_BACK ); if (ctx->Color.SWmasking) { clear_color_buffer_with_masking( ctx ); } else { GLint x = ctx->Buffer->Xmin; GLint y = ctx->Buffer->Ymin; GLint height = ctx->Buffer->Ymax - ctx->Buffer->Ymin + 1; GLint width = ctx->Buffer->Xmax - ctx->Buffer->Xmin + 1; (*ctx->Driver.Clear)( ctx, !ctx->Scissor.Enabled, x, y, width, height ); } (*ctx->Driver.SetBuffer)( ctx, GL_FRONT ); } }
/* * Clear the front/back/left/right color buffers. * This function is usually only called if we need to clear the * buffers with masking. */ static void clear_color_buffers(GLcontext *ctx) { SWcontext *swrast = SWRAST_CONTEXT(ctx); const GLuint colorMask = *((GLuint *) &ctx->Color.ColorMask); GLuint bufferBit; /* loop over four possible dest color buffers */ for (bufferBit = 1; bufferBit <= 8; bufferBit = bufferBit << 1) { if (bufferBit & ctx->Color.DrawDestMask) { if (bufferBit == FRONT_LEFT_BIT) { (void) (*ctx->Driver.SetDrawBuffer)( ctx, GL_FRONT_LEFT); (void) (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_FRONT_LEFT); } else if (bufferBit == FRONT_RIGHT_BIT) { (void) (*ctx->Driver.SetDrawBuffer)( ctx, GL_FRONT_RIGHT); (void) (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_FRONT_RIGHT); } else if (bufferBit == BACK_LEFT_BIT) { (void) (*ctx->Driver.SetDrawBuffer)( ctx, GL_BACK_LEFT); (void) (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_BACK_LEFT); } else { (void) (*ctx->Driver.SetDrawBuffer)( ctx, GL_BACK_RIGHT); (void) (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_BACK_RIGHT); } if (colorMask != 0xffffffff) { clear_color_buffer_with_masking(ctx); } else { clear_color_buffer(ctx); } } } /* restore default read/draw buffers */ (void) (*ctx->Driver.SetDrawBuffer)( ctx, ctx->Color.DriverDrawBuffer ); (void) (*swrast->Driver.SetReadBuffer)( ctx, ctx->ReadBuffer, ctx->Pixel.DriverReadBuffer ); }
/* * Clear the front/back/left/right color buffers. * This function is usually only called if we need to clear the * buffers with masking. */ static void clear_color_buffers(GLcontext *ctx) { SWcontext *swrast = SWRAST_CONTEXT(ctx); const GLuint colorMask = *((GLuint *) &ctx->Color.ColorMask); GLuint bufferBit; /* loop over four possible dest color buffers */ for (bufferBit = 1; bufferBit <= 8; bufferBit = bufferBit << 1) { if (bufferBit & ctx->Color._DrawDestMask) { (*swrast->Driver.SetBuffer)(ctx, ctx->DrawBuffer, bufferBit); if (colorMask != 0xffffffff) { clear_color_buffer_with_masking(ctx); } else { clear_color_buffer(ctx); } } } /* restore default read/draw buffer */ _swrast_use_draw_buffer(ctx); }