mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-12-15 08:56:26 -05:00
render/egl: introduce wlr_egl_unset_current
This function can be called after wlr_egl_make_current to cleanup the EGL context. This avoids having lingering EGL contexts that make things work by chance. Closes: https://github.com/swaywm/wlroots/issues/2197
This commit is contained in:
parent
781ed1ff02
commit
1edc42157b
8 changed files with 62 additions and 29 deletions
|
|
@ -35,6 +35,8 @@ static bool create_fbo(struct wlr_headless_output *output,
|
|||
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
|
||||
wlr_egl_unset_current(output->backend->egl);
|
||||
|
||||
if (status != GL_FRAMEBUFFER_COMPLETE) {
|
||||
wlr_log(WLR_ERROR, "Failed to create FBO");
|
||||
return false;
|
||||
|
|
@ -52,6 +54,9 @@ static void destroy_fbo(struct wlr_headless_output *output) {
|
|||
|
||||
glDeleteFramebuffers(1, &output->fbo);
|
||||
glDeleteRenderbuffers(1, &output->rbo);
|
||||
|
||||
wlr_egl_unset_current(output->backend->egl);
|
||||
|
||||
output->fbo = 0;
|
||||
output->rbo = 0;
|
||||
}
|
||||
|
|
@ -125,21 +130,23 @@ static bool output_commit(struct wlr_output *wlr_output) {
|
|||
}
|
||||
|
||||
if (wlr_output->pending.committed & WLR_OUTPUT_STATE_BUFFER) {
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
wlr_egl_unset_current(output->backend->egl);
|
||||
|
||||
// Nothing needs to be done for FBOs
|
||||
wlr_output_send_present(wlr_output, NULL);
|
||||
}
|
||||
|
||||
wlr_egl_make_current(output->backend->egl, EGL_NO_SURFACE, NULL);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void output_rollback(struct wlr_output *wlr_output) {
|
||||
struct wlr_headless_output *output =
|
||||
headless_output_from_output(wlr_output);
|
||||
wlr_egl_make_current(output->backend->egl, EGL_NO_SURFACE, NULL);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
if (wlr_output->pending.committed & WLR_OUTPUT_STATE_BUFFER) {
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
wlr_egl_unset_current(output->backend->egl);
|
||||
}
|
||||
}
|
||||
|
||||
static void output_destroy(struct wlr_output *wlr_output) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue