ctx->Meta = CALLOC_STRUCT(gl_meta_state);
}
+static GLenum
+gl_buffer_index_to_drawbuffers_enum(gl_buffer_index bufindex)
+{
+ assert(bufindex < BUFFER_COUNT);
+
+ if (bufindex >= BUFFER_COLOR0)
+ return GL_COLOR_ATTACHMENT0 + bufindex - BUFFER_COLOR0;
+ else if (bufindex == BUFFER_FRONT_LEFT)
+ return GL_FRONT_LEFT;
+ else if (bufindex == BUFFER_FRONT_RIGHT)
+ return GL_FRONT_RIGHT;
+ else if (bufindex == BUFFER_BACK_LEFT)
+ return GL_BACK_LEFT;
+ else if (bufindex == BUFFER_BACK_RIGHT)
+ return GL_BACK_RIGHT;
+
+ return GL_NONE;
+}
/**
* Free context meta-op state.
_mesa_set_framebuffer_srgb(ctx, GL_FALSE);
}
+ if (state & MESA_META_DRAW_BUFFERS) {
+ int buf, real_color_buffers = 0;
+ memset(save->ColorDrawBuffers, 0, sizeof(save->ColorDrawBuffers));
+
+ for (buf = 0; buf < MAX_DRAW_BUFFERS; buf++) {
+ int buf_index = ctx->DrawBuffer->_ColorDrawBufferIndexes[buf];
+ if (buf_index == -1)
+ continue;
+
+ save->ColorDrawBuffers[buf] =
+ gl_buffer_index_to_drawbuffers_enum(buf_index);
+
+ if (++real_color_buffers >= ctx->DrawBuffer->_NumColorDrawBuffers)
+ break;
+ }
+ }
+
/* misc */
{
save->Lighting = ctx->Light.Enabled;
ctx->CurrentRenderbuffer->Name != save->RenderbufferName)
_mesa_BindRenderbuffer(GL_RENDERBUFFER, save->RenderbufferName);
+ if (state & MESA_META_DRAW_BUFFERS) {
+ _mesa_DrawBuffers(MAX_DRAW_BUFFERS, save->ColorDrawBuffers);
+ }
+
ctx->Meta->SaveStackDepth--;
ctx->API = save->API;