mesa: refactor, create _mesa_update_draw_buffers() helper

Move this code out of _mesa_make_current() and put it into a
helper function.
This commit is contained in:
Brian Paul 2011-06-16 07:31:58 -06:00
parent 2960526816
commit 37e6ab7b2d
3 changed files with 27 additions and 11 deletions

View File

@ -461,6 +461,27 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers,
}
/**
* Update the current drawbuffer's _ColorDrawBufferIndex[] list, etc.
* from the context's Color.DrawBuffer[] state.
* Use when changing contexts.
*/
void
_mesa_update_draw_buffers(struct gl_context *ctx)
{
GLenum buffers[MAX_DRAW_BUFFERS];
GLuint i;
/* should be a window system FBO */
assert(ctx->DrawBuffer->Name == 0);
for (i = 0; i < ctx->Const.MaxDrawBuffers; i++)
buffers[i] = ctx->Color.DrawBuffer[i];
_mesa_drawbuffers(ctx, ctx->Const.MaxDrawBuffers, buffers, NULL);
}
/**
* Like \sa _mesa_drawbuffers(), this is a helper function for setting
* GL_READ_BUFFER state in the context and current FBO.

View File

@ -50,6 +50,10 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers,
extern void
_mesa_readbuffer(struct gl_context *ctx, GLenum buffer, GLint bufferIndex);
extern void
_mesa_update_draw_buffers(struct gl_context *ctx);
extern void GLAPIENTRY
_mesa_ReadBuffer( GLenum mode );

View File

@ -1456,21 +1456,12 @@ _mesa_make_current( struct gl_context *newCtx,
* or not bound to a user-created FBO.
*/
if (!newCtx->DrawBuffer || newCtx->DrawBuffer->Name == 0) {
_mesa_reference_framebuffer(&newCtx->DrawBuffer, drawBuffer);
/* Update the FBO's list of drawbuffers/renderbuffers.
* For winsys FBOs this comes from the GL state (which may have
* changed since the last time this FBO was bound).
*/
unsigned int i;
GLenum buffers[MAX_DRAW_BUFFERS];
_mesa_reference_framebuffer(&newCtx->DrawBuffer, drawBuffer);
for(i = 0; i < newCtx->Const.MaxDrawBuffers; i++) {
buffers[i] = newCtx->Color.DrawBuffer[i];
}
_mesa_drawbuffers(newCtx, newCtx->Const.MaxDrawBuffers,
buffers, NULL);
_mesa_update_draw_buffers(newCtx);
}
if (!newCtx->ReadBuffer || newCtx->ReadBuffer->Name == 0) {
_mesa_reference_framebuffer(&newCtx->ReadBuffer, readBuffer);