+ if (fb == ctx->DrawBuffer) {
+ if (ctx->Driver.DrawBuffer)
+ ctx->Driver.DrawBuffer(ctx);
+ if (ctx->Driver.DrawBufferAllocate)
+ ctx->Driver.DrawBufferAllocate(ctx);
+ }
+}
+
+
+static void
+draw_buffers_error(struct gl_context *ctx, struct gl_framebuffer *fb, GLsizei n,
+ const GLenum *buffers, const char *caller)
+{
+ draw_buffers(ctx, fb, n, buffers, caller, false);
+}
+
+
+static void
+draw_buffers_no_error(struct gl_context *ctx, struct gl_framebuffer *fb,
+ GLsizei n, const GLenum *buffers, const char *caller)
+{
+ draw_buffers(ctx, fb, n, buffers, caller, true);
+}
+
+
+void GLAPIENTRY
+_mesa_DrawBuffers_no_error(GLsizei n, const GLenum *buffers)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ draw_buffers_no_error(ctx, ctx->DrawBuffer, n, buffers, "glDrawBuffers");
+}
+
+
+void GLAPIENTRY
+_mesa_DrawBuffers(GLsizei n, const GLenum *buffers)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ draw_buffers_error(ctx, ctx->DrawBuffer, n, buffers, "glDrawBuffers");
+}
+
+void GLAPIENTRY
+_mesa_FramebufferDrawBuffersEXT(GLuint framebuffer, GLsizei n,
+ const GLenum *bufs)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ struct gl_framebuffer *fb;
+
+ if (framebuffer) {
+ fb = _mesa_lookup_framebuffer_dsa(ctx, framebuffer,
+ "glFramebufferDrawBuffersEXT");
+ if (!fb)
+ return;
+ }
+ else
+ fb = ctx->WinSysDrawBuffer;
+
+ draw_buffers_error(ctx, fb, n, bufs, "glFramebufferDrawBuffersEXT");
+}
+
+void GLAPIENTRY
+_mesa_NamedFramebufferDrawBuffers_no_error(GLuint framebuffer, GLsizei n,
+ const GLenum *bufs)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ struct gl_framebuffer *fb;
+
+ if (framebuffer) {
+ fb = _mesa_lookup_framebuffer(ctx, framebuffer);
+ } else {
+ fb = ctx->WinSysDrawBuffer;
+ }
+
+ draw_buffers_no_error(ctx, fb, n, bufs, "glNamedFramebufferDrawBuffers");
+}
+
+
+void GLAPIENTRY
+_mesa_NamedFramebufferDrawBuffers(GLuint framebuffer, GLsizei n,
+ const GLenum *bufs)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ struct gl_framebuffer *fb;
+
+ if (framebuffer) {
+ fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
+ "glNamedFramebufferDrawBuffers");
+ if (!fb)
+ return;
+ }
+ else
+ fb = ctx->WinSysDrawBuffer;
+
+ draw_buffers_error(ctx, fb, n, bufs, "glNamedFramebufferDrawBuffers");