Lines Matching refs:fb

56 compute_depth_max(struct gl_framebuffer *fb)
58 if (fb->Visual.depthBits == 0) {
63 fb->_DepthMax = (1 << 16) - 1;
65 else if (fb->Visual.depthBits < 32) {
66 fb->_DepthMax = (1 << fb->Visual.depthBits) - 1;
72 fb->_DepthMax = 0xffffffff;
74 fb->_DepthMaxF = (GLfloat) fb->_DepthMax;
77 fb->_MRD = (GLfloat)1.0 / fb->_DepthMaxF;
90 struct gl_framebuffer *fb = CALLOC_STRUCT(gl_framebuffer);
92 if (fb) {
93 _mesa_initialize_window_framebuffer(fb, visual);
95 return fb;
109 struct gl_framebuffer *fb;
112 fb = CALLOC_STRUCT(gl_framebuffer);
113 if (fb) {
114 _mesa_initialize_user_framebuffer(fb, name);
116 return fb;
126 _mesa_initialize_window_framebuffer(struct gl_framebuffer *fb,
129 assert(fb);
132 memset(fb, 0, sizeof(struct gl_framebuffer));
134 simple_mtx_init(&fb->Mutex, mtx_plain);
136 fb->RefCount = 1;
139 fb->Visual = *visual;
143 fb->_NumColorDrawBuffers = 1;
144 fb->ColorDrawBuffer[0] = GL_BACK;
145 fb->_ColorDrawBufferIndexes[0] = BUFFER_BACK_LEFT;
146 fb->ColorReadBuffer = GL_BACK;
147 fb->_ColorReadBufferIndex = BUFFER_BACK_LEFT;
150 fb->_NumColorDrawBuffers = 1;
151 fb->ColorDrawBuffer[0] = GL_FRONT;
152 fb->_ColorDrawBufferIndexes[0] = BUFFER_FRONT_LEFT;
153 fb->ColorReadBuffer = GL_FRONT;
154 fb->_ColorReadBufferIndex = BUFFER_FRONT_LEFT;
157 fb->Delete = _mesa_destroy_framebuffer;
158 fb->_Status = GL_FRAMEBUFFER_COMPLETE_EXT;
159 fb->_AllColorBuffersFixedPoint = !visual->floatMode;
160 fb->_HasSNormOrFloatColorBuffer = visual->floatMode;
161 fb->_HasAttachments = true;
162 fb->FlipY = true;
164 fb->SampleLocationTable = NULL;
165 fb->ProgrammableSampleLocations = 0;
166 fb->SampleLocationPixelGrid = 0;
168 compute_depth_max(fb);
177 _mesa_initialize_user_framebuffer(struct gl_framebuffer *fb, GLuint name)
179 assert(fb);
182 memset(fb, 0, sizeof(struct gl_framebuffer));
184 fb->Name = name;
185 fb->RefCount = 1;
186 fb->_NumColorDrawBuffers = 1;
187 fb->ColorDrawBuffer[0] = GL_COLOR_ATTACHMENT0_EXT;
188 fb->_ColorDrawBufferIndexes[0] = BUFFER_COLOR0;
189 fb->ColorReadBuffer = GL_COLOR_ATTACHMENT0_EXT;
190 fb->_ColorReadBufferIndex = BUFFER_COLOR0;
191 fb->SampleLocationTable = NULL;
192 fb->ProgrammableSampleLocations = 0;
193 fb->SampleLocationPixelGrid = 0;
194 fb->Delete = _mesa_destroy_framebuffer;
195 simple_mtx_init(&fb->Mutex, mtx_plain);
204 _mesa_destroy_framebuffer(struct gl_framebuffer *fb)
206 if (fb) {
207 _mesa_free_framebuffer_data(fb);
208 free(fb->Label);
209 free(fb);
219 _mesa_free_framebuffer_data(struct gl_framebuffer *fb)
221 assert(fb);
222 assert(fb->RefCount == 0);
224 simple_mtx_destroy(&fb->Mutex);
227 struct gl_renderbuffer_attachment *att = &fb->Attachment[i];
239 free(fb->SampleLocationTable);
240 fb->SampleLocationTable = NULL;
245 * Set *ptr to point to fb, with refcounting and locking.
251 struct gl_framebuffer *fb)
270 if (fb) {
271 simple_mtx_lock(&fb->Mutex);
272 fb->RefCount++;
273 simple_mtx_unlock(&fb->Mutex);
274 *ptr = fb;
289 _mesa_resize_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
297 assert(_mesa_is_winsys_fbo(fb));
300 struct gl_renderbuffer_attachment *att = &fb->Attachment[i];
317 fb->Width = width;
318 fb->Height = height;
435 struct gl_framebuffer *fb)
437 memset(&fb->Visual, 0, sizeof(fb->Visual));
438 fb->Visual.rgbMode = GL_TRUE; /* assume this */
442 if (fb->Attachment[i].Renderbuffer) {
443 const struct gl_renderbuffer *rb = fb->Attachment[i].Renderbuffer;
451 fb->Visual.samples = rb->NumSamples;
452 fb->Visual.sampleBuffers = rb->NumSamples > 0 ? 1 : 0;
455 fb->Visual.redBits = _mesa_get_format_bits(fmt, GL_RED_BITS);
456 fb->Visual.greenBits = _mesa_get_format_bits(fmt, GL_GREEN_BITS);
457 fb->Visual.blueBits = _mesa_get_format_bits(fmt, GL_BLUE_BITS);
458 fb->Visual.alphaBits = _mesa_get_format_bits(fmt, GL_ALPHA_BITS);
459 fb->Visual.rgbBits = fb->Visual.redBits
460 + fb->Visual.greenBits + fb->Visual.blueBits;
462 fb->Visual.sRGBCapable = ctx->Extensions.EXT_sRGB;
468 fb->Visual.floatMode = GL_FALSE;
470 if (fb->Attachment[i].Renderbuffer) {
471 const struct gl_renderbuffer *rb = fb->Attachment[i].Renderbuffer;
475 fb->Visual.floatMode = GL_TRUE;
481 if (fb->Attachment[BUFFER_DEPTH].Renderbuffer) {
483 fb->Attachment[BUFFER_DEPTH].Renderbuffer;
485 fb->Visual.haveDepthBuffer = GL_TRUE;
486 fb->Visual.depthBits = _mesa_get_format_bits(fmt, GL_DEPTH_BITS);
489 if (fb->Attachment[BUFFER_STENCIL].Renderbuffer) {
491 fb->Attachment[BUFFER_STENCIL].Renderbuffer;
493 fb->Visual.haveStencilBuffer = GL_TRUE;
494 fb->Visual.stencilBits = _mesa_get_format_bits(fmt, GL_STENCIL_BITS);
497 if (fb->Attachment[BUFFER_ACCUM].Renderbuffer) {
499 fb->Attachment[BUFFER_ACCUM].Renderbuffer;
501 fb->Visual.haveAccumBuffer = GL_TRUE;
502 fb->Visual.accumRedBits = _mesa_get_format_bits(fmt, GL_RED_BITS);
503 fb->Visual.accumGreenBits = _mesa_get_format_bits(fmt, GL_GREEN_BITS);
504 fb->Visual.accumBlueBits = _mesa_get_format_bits(fmt, GL_BLUE_BITS);
505 fb->Visual.accumAlphaBits = _mesa_get_format_bits(fmt, GL_ALPHA_BITS);
508 compute_depth_max(fb);
563 update_color_draw_buffers(struct gl_framebuffer *fb)
568 fb->_ColorDrawBuffers[0] = NULL;
570 for (output = 0; output < fb->_NumColorDrawBuffers; output++) {
571 gl_buffer_index buf = fb->_ColorDrawBufferIndexes[output];
573 fb->_ColorDrawBuffers[output] = fb->Attachment[buf].Renderbuffer;
576 fb->_ColorDrawBuffers[output] = NULL;
587 update_color_read_buffer(struct gl_framebuffer *fb)
589 if (fb->_ColorReadBufferIndex == BUFFER_NONE ||
590 fb->DeletePending ||
591 fb->Width == 0 ||
592 fb->Height == 0) {
593 fb->_ColorReadBuffer = NULL; /* legal! */
596 assert(fb->_ColorReadBufferIndex >= 0);
597 assert(fb->_ColorReadBufferIndex < BUFFER_COUNT);
598 fb->_ColorReadBuffer
599 = fb->Attachment[fb->_ColorReadBufferIndex].Renderbuffer;
619 update_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
621 if (_mesa_is_winsys_fbo(fb)) {
626 if (fb->ColorDrawBuffer[0] != ctx->Color.DrawBuffer[0]) {
627 _mesa_drawbuffers(ctx, fb, ctx->Const.MaxDrawBuffers,
631 /* Call device driver function if fb is the bound draw buffer. */
632 if (fb == ctx->DrawBuffer) {
641 if (fb->_Status != GL_FRAMEBUFFER_COMPLETE) {
642 _mesa_test_framebuffer_completeness(ctx, fb);
651 update_color_draw_buffers(fb);
652 update_color_read_buffer(fb);
654 compute_depth_max(fb);
687 struct gl_framebuffer *fb,
691 const struct gl_renderbuffer_attachment *att = fb->Attachment;
694 if (fb->_Status == 0) {
695 _mesa_test_framebuffer_completeness(ctx, fb);
698 if (fb->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
730 const struct gl_renderbuffer *readBuf = fb->_ColorReadBuffer;
803 * If @fb is NULL, the method returns the value for the current bound
808 struct gl_framebuffer *fb,
814 if (fb == NULL)
815 fb = ctx->ReadBuffer;
817 if (!fb || !fb->_ColorReadBuffer) {
847 const mesa_format format = fb->_ColorReadBuffer->Format;
899 * If @fb is NULL, the method returns the value for the current bound
904 struct gl_framebuffer *fb,
910 if (fb == NULL)
911 fb = ctx->ReadBuffer;
913 if (!fb || !fb->_ColorReadBuffer) {
923 const mesa_format format = fb->_ColorReadBuffer->Format;
958 _mesa_print_framebuffer(const struct gl_framebuffer *fb)
960 fprintf(stderr, "Mesa Framebuffer %u at %p\n", fb->Name, (void *) fb);
961 fprintf(stderr, " Size: %u x %u Status: %s\n", fb->Width, fb->Height,
962 _mesa_enum_to_string(fb->_Status));
966 const struct gl_renderbuffer_attachment *att = &fb->Attachment[i];
991 _mesa_is_front_buffer_reading(const struct gl_framebuffer *fb)
993 if (!fb || _mesa_is_user_fbo(fb))
996 return fb->_ColorReadBufferIndex == BUFFER_FRONT_LEFT;
1000 _mesa_is_front_buffer_drawing(const struct gl_framebuffer *fb)
1002 if (!fb || _mesa_is_user_fbo(fb))
1005 return (fb->_NumColorDrawBuffers >= 1 &&
1006 fb->_ColorDrawBufferIndexes[0] == BUFFER_FRONT_LEFT);