more fixes for mesa's fbo handling (fixes tests/fbotest1/2)
This commit is contained in:
@@ -557,9 +557,8 @@ _mesa_ReadBuffer(GLenum buffer)
|
||||
}
|
||||
}
|
||||
|
||||
if (fb->Name == 0) {
|
||||
ctx->Pixel.ReadBuffer = buffer;
|
||||
}
|
||||
ctx->Pixel.ReadBuffer = buffer;
|
||||
|
||||
fb->ColorReadBuffer = buffer;
|
||||
fb->_ColorReadBufferIndex = srcBuffer;
|
||||
|
||||
|
@@ -1499,6 +1499,11 @@ _mesa_make_current( GLcontext *newCtx, GLframebuffer *drawBuffer,
|
||||
if the DRIdrawable changes, and someone may rely on them.
|
||||
*/
|
||||
/* What a mess!?! */
|
||||
/* XXX this is still not quite correct. Imagine a user-created fbo
|
||||
bound on a context. Now rebind with a completely new drawable.
|
||||
Upon rebinding to the window-framebuffer, we have no idea what
|
||||
the read and write buffers should be (front, back, ...) - that
|
||||
information was only available in the previously used drawable... */
|
||||
int i;
|
||||
GLenum buffers[MAX_DRAW_BUFFERS];
|
||||
for(i = 0; i < newCtx->Const.MaxDrawBuffers; i++) {
|
||||
|
@@ -1003,13 +1003,20 @@ _mesa_BindFramebufferEXT(GLenum target, GLuint framebuffer)
|
||||
|
||||
if (bindReadBuf) {
|
||||
_mesa_reference_framebuffer(&ctx->ReadBuffer, newFbread);
|
||||
/* set context value */
|
||||
ctx->Pixel.ReadBuffer = newFbread->ColorReadBuffer;
|
||||
}
|
||||
|
||||
if (bindDrawBuf) {
|
||||
GLuint i;
|
||||
/* check if old FB had any texture attachments */
|
||||
check_end_texture_render(ctx, ctx->DrawBuffer);
|
||||
/* check if time to delete this framebuffer */
|
||||
_mesa_reference_framebuffer(&ctx->DrawBuffer, newFb);
|
||||
/* set context value */
|
||||
for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) {
|
||||
ctx->Color.DrawBuffer[i] = newFb->ColorDrawBuffer[i];
|
||||
}
|
||||
if (newFb->Name != 0) {
|
||||
/* check if newly bound framebuffer has any texture attachments */
|
||||
check_begin_texture_render(ctx, newFb);
|
||||
|
Reference in New Issue
Block a user