Lines Matching refs:fb
58 compute_depth_max(struct gl_framebuffer *fb)
60 if (fb->Visual.depthBits == 0) {
65 fb->_DepthMax = (1 << 16) - 1;
67 else if (fb->Visual.depthBits < 32) {
68 fb->_DepthMax = (1 << fb->Visual.depthBits) - 1;
74 fb->_DepthMax = 0xffffffff;
76 fb->_DepthMaxF = (GLfloat) fb->_DepthMax;
79 fb->_MRD = (GLfloat)1.0 / fb->_DepthMaxF;
91 struct gl_framebuffer *fb;
94 fb = CALLOC_STRUCT(gl_framebuffer);
95 if (fb) {
96 _mesa_initialize_user_framebuffer(fb, name);
98 return fb;
108 _mesa_initialize_window_framebuffer(struct gl_framebuffer *fb,
111 assert(fb);
114 memset(fb, 0, sizeof(struct gl_framebuffer));
116 simple_mtx_init(&fb->Mutex, mtx_plain);
118 fb->RefCount = 1;
121 fb->Visual = *visual;
125 fb->_NumColorDrawBuffers = 1;
126 fb->ColorDrawBuffer[0] = GL_BACK;
127 fb->_ColorDrawBufferIndexes[0] = BUFFER_BACK_LEFT;
128 fb->ColorReadBuffer = GL_BACK;
129 fb->_ColorReadBufferIndex = BUFFER_BACK_LEFT;
132 fb->_NumColorDrawBuffers = 1;
133 fb->ColorDrawBuffer[0] = GL_FRONT;
134 fb->_ColorDrawBufferIndexes[0] = BUFFER_FRONT_LEFT;
135 fb->ColorReadBuffer = GL_FRONT;
136 fb->_ColorReadBufferIndex = BUFFER_FRONT_LEFT;
139 fb->Delete = _mesa_destroy_framebuffer;
140 fb->_Status = GL_FRAMEBUFFER_COMPLETE_EXT;
141 fb->_AllColorBuffersFixedPoint = !visual->floatMode;
142 fb->_HasSNormOrFloatColorBuffer = visual->floatMode;
143 fb->_HasAttachments = true;
144 fb->FlipY = true;
146 fb->SampleLocationTable = NULL;
147 fb->ProgrammableSampleLocations = 0;
148 fb->SampleLocationPixelGrid = 0;
150 compute_depth_max(fb);
159 _mesa_initialize_user_framebuffer(struct gl_framebuffer *fb, GLuint name)
161 assert(fb);
164 memset(fb, 0, sizeof(struct gl_framebuffer));
166 fb->Name = name;
167 fb->RefCount = 1;
168 fb->_NumColorDrawBuffers = 1;
169 fb->ColorDrawBuffer[0] = GL_COLOR_ATTACHMENT0_EXT;
170 fb->_ColorDrawBufferIndexes[0] = BUFFER_COLOR0;
171 fb->ColorReadBuffer = GL_COLOR_ATTACHMENT0_EXT;
172 fb->_ColorReadBufferIndex = BUFFER_COLOR0;
173 fb->SampleLocationTable = NULL;
174 fb->ProgrammableSampleLocations = 0;
175 fb->SampleLocationPixelGrid = 0;
176 fb->Delete = _mesa_destroy_framebuffer;
177 simple_mtx_init(&fb->Mutex, mtx_plain);
186 _mesa_destroy_framebuffer(struct gl_framebuffer *fb)
188 if (fb) {
189 _mesa_free_framebuffer_data(fb);
190 free(fb->Label);
191 free(fb);
201 _mesa_free_framebuffer_data(struct gl_framebuffer *fb)
203 assert(fb);
204 assert(fb->RefCount == 0);
206 simple_mtx_destroy(&fb->Mutex);
209 struct gl_renderbuffer_attachment *att = &fb->Attachment[i];
221 free(fb->SampleLocationTable);
222 fb->SampleLocationTable = NULL;
227 * Set *ptr to point to fb, with refcounting and locking.
233 struct gl_framebuffer *fb)
252 if (fb) {
253 simple_mtx_lock(&fb->Mutex);
254 fb->RefCount++;
255 simple_mtx_unlock(&fb->Mutex);
256 *ptr = fb;
271 _mesa_resize_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
279 assert(_mesa_is_winsys_fbo(fb));
282 struct gl_renderbuffer_attachment *att = &fb->Attachment[i];
299 fb->Width = width;
300 fb->Height = height;
417 struct gl_framebuffer *fb)
419 memset(&fb->Visual, 0, sizeof(fb->Visual));
423 if (fb->Attachment[i].Renderbuffer) {
424 const struct gl_renderbuffer *rb = fb->Attachment[i].Renderbuffer;
432 fb->Visual.samples = rb->NumSamples;
435 fb->Visual.redBits = _mesa_get_format_bits(fmt, GL_RED_BITS);
436 fb->Visual.greenBits = _mesa_get_format_bits(fmt, GL_GREEN_BITS);
437 fb->Visual.blueBits = _mesa_get_format_bits(fmt, GL_BLUE_BITS);
438 fb->Visual.alphaBits = _mesa_get_format_bits(fmt, GL_ALPHA_BITS);
439 fb->Visual.rgbBits = fb->Visual.redBits + fb->Visual.greenBits +
440 fb->Visual.blueBits + fb->Visual.alphaBits;
442 fb->Visual.sRGBCapable = ctx->Extensions.EXT_sRGB;
448 fb->Visual.floatMode = GL_FALSE;
452 if (fb->Attachment[i].Renderbuffer) {
453 const struct gl_renderbuffer *rb = fb->Attachment[i].Renderbuffer;
457 fb->Visual.floatMode = GL_TRUE;
463 if (fb->Attachment[BUFFER_DEPTH].Renderbuffer) {
465 fb->Attachment[BUFFER_DEPTH].Renderbuffer;
467 fb->Visual.depthBits = _mesa_get_format_bits(fmt, GL_DEPTH_BITS);
470 if (fb->Attachment[BUFFER_STENCIL].Renderbuffer) {
472 fb->Attachment[BUFFER_STENCIL].Renderbuffer;
474 fb->Visual.stencilBits = _mesa_get_format_bits(fmt, GL_STENCIL_BITS);
477 if (fb->Attachment[BUFFER_ACCUM].Renderbuffer) {
479 fb->Attachment[BUFFER_ACCUM].Renderbuffer;
481 fb->Visual.accumRedBits = _mesa_get_format_bits(fmt, GL_RED_BITS);
482 fb->Visual.accumGreenBits = _mesa_get_format_bits(fmt, GL_GREEN_BITS);
483 fb->Visual.accumBlueBits = _mesa_get_format_bits(fmt, GL_BLUE_BITS);
484 fb->Visual.accumAlphaBits = _mesa_get_format_bits(fmt, GL_ALPHA_BITS);
487 compute_depth_max(fb);
544 update_color_draw_buffers(struct gl_framebuffer *fb)
549 fb->_ColorDrawBuffers[0] = NULL;
551 for (output = 0; output < fb->_NumColorDrawBuffers; output++) {
552 gl_buffer_index buf = fb->_ColorDrawBufferIndexes[output];
554 fb->_ColorDrawBuffers[output] = fb->Attachment[buf].Renderbuffer;
557 fb->_ColorDrawBuffers[output] = NULL;
568 update_color_read_buffer(struct gl_framebuffer *fb)
570 if (fb->_ColorReadBufferIndex == BUFFER_NONE ||
571 fb->DeletePending ||
572 fb->Width == 0 ||
573 fb->Height == 0) {
574 fb->_ColorReadBuffer = NULL; /* legal! */
577 assert(fb->_ColorReadBufferIndex >= 0);
578 assert(fb->_ColorReadBufferIndex < BUFFER_COUNT);
579 fb->_ColorReadBuffer
580 = fb->Attachment[fb->_ColorReadBufferIndex].Renderbuffer;
600 update_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
602 if (_mesa_is_winsys_fbo(fb)) {
607 if (fb->ColorDrawBuffer[0] != ctx->Color.DrawBuffer[0]) {
608 _mesa_drawbuffers(ctx, fb, ctx->Const.MaxDrawBuffers,
612 /* Call device driver function if fb is the bound draw buffer. */
613 if (fb == ctx->DrawBuffer) {
622 if (fb->_Status != GL_FRAMEBUFFER_COMPLETE) {
623 _mesa_test_framebuffer_completeness(ctx, fb);
632 update_color_draw_buffers(fb);
633 update_color_read_buffer(fb);
635 compute_depth_max(fb);
668 struct gl_framebuffer *fb,
672 const struct gl_renderbuffer_attachment *att = fb->Attachment;
675 if (fb->_Status == 0) {
676 _mesa_test_framebuffer_completeness(ctx, fb);
679 if (fb->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
711 const struct gl_renderbuffer *readBuf = fb->_ColorReadBuffer;
791 * If @fb is NULL, the method returns the value for the current bound
796 struct gl_framebuffer *fb,
802 if (fb == NULL)
803 fb = ctx->ReadBuffer;
805 if (!fb || !fb->_ColorReadBuffer) {
835 const mesa_format format = fb->_ColorReadBuffer->Format;
886 * If @fb is NULL, the method returns the value for the current bound
891 struct gl_framebuffer *fb,
897 if (fb == NULL)
898 fb = ctx->ReadBuffer;
900 if (!fb || !fb->_ColorReadBuffer) {
910 const mesa_format format = fb->_ColorReadBuffer->Format;
945 _mesa_print_framebuffer(const struct gl_framebuffer *fb)
947 fprintf(stderr, "Mesa Framebuffer %u at %p\n", fb->Name, (void *) fb);
948 fprintf(stderr, " Size: %u x %u Status: %s\n", fb->Width, fb->Height,
949 _mesa_enum_to_string(fb->_Status));
953 const struct gl_renderbuffer_attachment *att = &fb->Attachment[i];
978 _mesa_is_front_buffer_reading(const struct gl_framebuffer *fb)
980 if (!fb || _mesa_is_user_fbo(fb))
983 return fb->_ColorReadBufferIndex == BUFFER_FRONT_LEFT;
987 _mesa_is_front_buffer_drawing(const struct gl_framebuffer *fb)
989 if (!fb || _mesa_is_user_fbo(fb))
992 return (fb->_NumColorDrawBuffers >= 1 &&
993 fb->_ColorDrawBufferIndexes[0] == BUFFER_FRONT_LEFT);