diff options
author | Erik Reider <[email protected]> | 2024-01-02 01:15:34 +0100 |
---|---|---|
committer | Erik Reider <[email protected]> | 2024-01-03 23:49:04 +0100 |
commit | 1a6918f948be034e65c50af8969d090b5e762dc1 (patch) | |
tree | d84116dac67ee8b649534b86c01851fc2956c3b7 /render/fx_renderer/fx_framebuffer.c | |
parent | 51c7078b9ec413ebd8316501f01ccf769a090f64 (diff) |
Integrated the stencil rb into fx_framebuffer
Every fx_framebuffer will now have a stencil buffer
Diffstat (limited to 'render/fx_renderer/fx_framebuffer.c')
-rw-r--r-- | render/fx_renderer/fx_framebuffer.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/render/fx_renderer/fx_framebuffer.c b/render/fx_renderer/fx_framebuffer.c index 3e52f49..fea101b 100644 --- a/render/fx_renderer/fx_framebuffer.c +++ b/render/fx_renderer/fx_framebuffer.c @@ -62,15 +62,32 @@ struct fx_framebuffer *fx_framebuffer_get_or_create(struct fx_renderer *renderer glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, buffer->rbo); GLenum fb_status = glCheckFramebufferStatus(GL_FRAMEBUFFER); - glBindFramebuffer(GL_FRAMEBUFFER, 0); - - pop_fx_debug(renderer); - if (fb_status != GL_FRAMEBUFFER_COMPLETE) { wlr_log(WLR_ERROR, "Failed to create FBO"); + glBindFramebuffer(GL_FRAMEBUFFER, 0); goto error_image; } + // Init stencil buffer + glGenRenderbuffers(1, &buffer->sb); + glBindRenderbuffer(GL_RENDERBUFFER, buffer->sb); + glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, + wlr_buffer->width, wlr_buffer->height); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, + GL_RENDERBUFFER, buffer->sb); + fb_status = glCheckFramebufferStatus(GL_FRAMEBUFFER); + if (fb_status != GL_FRAMEBUFFER_COMPLETE) { + wlr_log(WLR_ERROR, + "Stencil buffer incomplete, couldn't create! (FB status: %i)", + fb_status); + glBindFramebuffer(GL_FRAMEBUFFER, 0); + goto error_stencil; + } + + glBindFramebuffer(GL_FRAMEBUFFER, 0); + + pop_fx_debug(renderer); + wlr_addon_init(&buffer->addon, &wlr_buffer->addons, renderer, &buffer_addon_impl); @@ -81,6 +98,8 @@ struct fx_framebuffer *fx_framebuffer_get_or_create(struct fx_renderer *renderer return buffer; +error_stencil: + glDeleteRenderbuffers(1, &buffer->sb); error_image: wlr_egl_destroy_image(renderer->egl, buffer->image); error_buffer: |