diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c index 947b12b4..14f37ebb 100644 --- a/libweston/renderer-gl/gl-renderer.c +++ b/libweston/renderer-gl/gl-renderer.c @@ -93,6 +93,8 @@ struct gl_fbo_texture { struct gl_renderbuffer { struct weston_renderbuffer base; enum gl_border_status border_damage; + /* The fbo value zero represents the default surface framebuffer. */ + GLuint fbo; struct wl_list link; int age; }; @@ -736,6 +738,8 @@ gl_renderer_create_dummy_renderbuffer(struct weston_output *output) renderbuffer = xzalloc(sizeof(*renderbuffer)); + renderbuffer->fbo = 0; + pixman_region32_init(&renderbuffer->base.damage); pixman_region32_copy(&renderbuffer->base.damage, &output->region); renderbuffer->border_damage = BORDER_ALL_DIRTY; @@ -1855,7 +1859,7 @@ gl_renderer_repaint_output(struct weston_output *output, glBindFramebuffer(GL_FRAMEBUFFER, go->shadow.fbo); glViewport(0, 0, go->area.width, go->area.height); } else { - glBindFramebuffer(GL_FRAMEBUFFER, 0); + glBindFramebuffer(GL_FRAMEBUFFER, rb->fbo); glViewport(go->area.x, area_inv_y, go->area.width, go->area.height); } @@ -1896,7 +1900,7 @@ gl_renderer_repaint_output(struct weston_output *output, else repaint_views(output, output_damage); - glBindFramebuffer(GL_FRAMEBUFFER, 0); + glBindFramebuffer(GL_FRAMEBUFFER, rb->fbo); glViewport(go->area.x, area_inv_y, go->area.width, go->area.height); blit_shadow_to_output(output, &rb->base.damage);