Lines Matching refs:ctx

55 supported_buffer_bitmask(const struct gl_context *ctx,
62 mask = ((1 << ctx->Const.MaxColorAttachments) - 1) << BUFFER_COLOR0;
93 draw_buffer_enum_to_bitmask(const struct gl_context *ctx, GLenum buffer)
101 if (_mesa_is_gles(ctx)) {
117 if (ctx->DrawBuffer->Visual.doubleBufferMode)
176 read_buffer_enum_to_index(const struct gl_context *ctx, GLenum buffer)
182 if (_mesa_is_gles(ctx)) {
189 if (!ctx->DrawBuffer->Visual.doubleBufferMode)
254 * current ctx->DrawBuffer is a window-system framebuffer or a user-created
256 * In the former case, we update the per-context ctx->Color.DrawBuffer
268 draw_buffer(struct gl_context *ctx, struct gl_framebuffer *fb,
273 FLUSH_VERTICES(ctx, 0);
276 _mesa_debug(ctx, "%s %s\n", caller, _mesa_enum_to_string(buffer));
284 = supported_buffer_bitmask(ctx, fb);
285 destMask = draw_buffer_enum_to_bitmask(ctx, buffer);
288 _mesa_error(ctx, GL_INVALID_ENUM, "%s(invalid buffer %s)", caller,
295 _mesa_error(ctx, GL_INVALID_OPERATION, "%s(invalid buffer %s)",
302 _mesa_drawbuffers(ctx, fb, 1, &buffer, &destMask);
305 if (fb == ctx->DrawBuffer) {
306 if (ctx->Driver.DrawBuffers)
307 ctx->Driver.DrawBuffers(ctx, 1, &buffer);
308 else if (ctx->Driver.DrawBuffer)
309 ctx->Driver.DrawBuffer(ctx, buffer);
317 GET_CURRENT_CONTEXT(ctx);
318 draw_buffer(ctx, ctx->DrawBuffer, buffer, "glDrawBuffer");
325 GET_CURRENT_CONTEXT(ctx);
329 fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
335 fb = ctx->WinSysDrawBuffer;
337 draw_buffer(ctx, fb, buf, "glNamedFramebufferDrawBuffer");
353 draw_buffers(struct gl_context *ctx, struct gl_framebuffer *fb,
360 FLUSH_VERTICES(ctx, 0);
370 _mesa_error(ctx, GL_INVALID_VALUE, "%s(n < 0)", caller);
374 if (n > (GLsizei) ctx->Const.MaxDrawBuffers) {
375 _mesa_error(ctx, GL_INVALID_VALUE,
380 supportedMask = supported_buffer_bitmask(ctx, fb);
388 if (ctx->API == API_OPENGLES2 && _mesa_is_winsys_fbo(fb) &&
390 _mesa_error(ctx, GL_INVALID_OPERATION, "%s(invalid buffers)", caller);
396 destMask[output] = draw_buffer_enum_to_bitmask(ctx, buffers[output]);
403 _mesa_error(ctx, GL_INVALID_ENUM, "%s(invalid buffer %s)",
428 if (_mesa_is_winsys_fbo(fb) && ctx->Version >= 40 &&
431 _mesa_error(ctx, GL_INVALID_OPERATION, "%s(with GL_BACK n must be 1)",
436 _mesa_error(ctx, GL_INVALID_ENUM, "%s(invalid buffer %s)",
451 if (_mesa_is_gles3(ctx) && _mesa_is_user_fbo(fb) &&
454 buffers[output] >= GL_COLOR_ATTACHMENT0 + ctx->Const.MaxColorAttachments)) {
455 _mesa_error(ctx, GL_INVALID_OPERATION, "glDrawBuffers(buffer)");
472 GL_COLOR_ATTACHMENT0 + ctx->Const.MaxDrawBuffers) {
473 _mesa_error(ctx, GL_INVALID_OPERATION,
491 _mesa_error(ctx, GL_INVALID_OPERATION,
502 if (ctx->API == API_OPENGLES2 && _mesa_is_user_fbo(fb) &&
505 _mesa_error(ctx, GL_INVALID_OPERATION,
517 _mesa_error(ctx, GL_INVALID_OPERATION,
529 _mesa_drawbuffers(ctx, fb, n, buffers, destMask);
537 if (fb == ctx->DrawBuffer) {
538 if (ctx->Driver.DrawBuffers)
539 ctx->Driver.DrawBuffers(ctx, n, buffers);
540 else if (ctx->Driver.DrawBuffer)
541 ctx->Driver.DrawBuffer(ctx, n > 0 ? buffers[0] : GL_NONE);
549 GET_CURRENT_CONTEXT(ctx);
550 draw_buffers(ctx, ctx->DrawBuffer, n, buffers, "glDrawBuffers");
558 GET_CURRENT_CONTEXT(ctx);
562 fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
568 fb = ctx->WinSysDrawBuffer;
570 draw_buffers(ctx, fb, n, bufs, "glNamedFramebufferDrawBuffers");
579 updated_drawbuffers(struct gl_context *ctx, struct gl_framebuffer *fb)
581 FLUSH_VERTICES(ctx, _NEW_BUFFERS);
583 if (ctx->API == API_OPENGL_COMPAT && !ctx->Extensions.ARB_ES2_compatibility) {
599 * \param ctx current context
608 _mesa_drawbuffers(struct gl_context *ctx, struct gl_framebuffer *fb,
616 const GLbitfield supportedMask = supported_buffer_bitmask(ctx, fb);
619 mask[output] = draw_buffer_enum_to_bitmask(ctx, buffers[output]);
636 updated_drawbuffers(ctx, fb);
652 updated_drawbuffers(ctx, fb);
659 updated_drawbuffers(ctx, fb);
669 for (buf = fb->_NumColorDrawBuffers; buf < ctx->Const.MaxDrawBuffers; buf++) {
671 updated_drawbuffers(ctx, fb);
675 for (buf = n; buf < ctx->Const.MaxDrawBuffers; buf++) {
681 for (buf = 0; buf < ctx->Const.MaxDrawBuffers; buf++) {
682 if (ctx->Color.DrawBuffer[buf] != fb->ColorDrawBuffer[buf]) {
683 updated_drawbuffers(ctx, fb);
684 ctx->Color.DrawBuffer[buf] = fb->ColorDrawBuffer[buf];
697 _mesa_update_draw_buffers(struct gl_context *ctx)
700 assert(_mesa_is_winsys_fbo(ctx->DrawBuffer));
702 _mesa_drawbuffers(ctx, ctx->DrawBuffer, ctx->Const.MaxDrawBuffers,
703 ctx->Color.DrawBuffer, NULL);
712 * \param ctx the rendering context
718 _mesa_readbuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
721 if ((fb == ctx->ReadBuffer) && _mesa_is_winsys_fbo(fb)) {
725 ctx->Pixel.ReadBuffer = buffer;
731 ctx->NewState |= _NEW_BUFFERS;
742 read_buffer(struct gl_context *ctx, struct gl_framebuffer *fb,
748 FLUSH_VERTICES(ctx, 0);
751 _mesa_debug(ctx, "%s %s\n", caller, _mesa_enum_to_string(buffer));
759 if (_mesa_is_gles3(ctx) && !is_legal_es3_readbuffer_enum(buffer))
762 srcBuffer = read_buffer_enum_to_index(ctx, buffer);
765 _mesa_error(ctx, GL_INVALID_ENUM,
770 supportedMask = supported_buffer_bitmask(ctx, fb);
772 _mesa_error(ctx, GL_INVALID_OPERATION,
781 _mesa_readbuffer(ctx, fb, buffer, srcBuffer);
784 if (fb == ctx->ReadBuffer) {
785 if (ctx->Driver.ReadBuffer)
786 ctx->Driver.ReadBuffer(ctx, buffer);
794 GET_CURRENT_CONTEXT(ctx);
795 read_buffer(ctx, ctx->ReadBuffer, buffer, "glReadBuffer");
802 GET_CURRENT_CONTEXT(ctx);
806 fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
812 fb = ctx->WinSysReadBuffer;
814 read_buffer(ctx, fb, src, "glNamedFramebufferReadBuffer");