vlc | branch: master | Romain Vimont <[email protected]> | Tue Oct 20 14:06:19 
2020 +0200| [8bcd38ca4530d74b7362a5ecdec6505c8a5de586] | committer: Alexandre 
Janniaux

opengl: fix framebuffer initialization

The caller does not expect the current bindings to change when calling
vlc_gl_filters_InitFramebuffers().

Signed-off-by: Alexandre Janniaux <[email protected]>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=8bcd38ca4530d74b7362a5ecdec6505c8a5de586
---

 modules/video_output/opengl/filters.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/modules/video_output/opengl/filters.c 
b/modules/video_output/opengl/filters.c
index 13088f44e9..493bfd5193 100644
--- a/modules/video_output/opengl/filters.c
+++ b/modules/video_output/opengl/filters.c
@@ -200,7 +200,6 @@ InitFramebufferOut(struct vlc_gl_filter_priv *priv)
     if (status != GL_FRAMEBUFFER_COMPLETE)
         return VLC_EGENERIC;
 
-    vt->BindFramebuffer(GL_FRAMEBUFFER, 0);
     return VLC_SUCCESS;
 }
 
@@ -228,7 +227,6 @@ InitFramebufferMSAA(struct vlc_gl_filter_priv *priv, 
unsigned msaa_level)
     if (status != GL_FRAMEBUFFER_COMPLETE)
         return VLC_EGENERIC;
 
-    vt->BindFramebuffer(GL_FRAMEBUFFER, 0);
     return VLC_SUCCESS;
 }
 
@@ -368,6 +366,14 @@ vlc_gl_filters_InitFramebuffers(struct vlc_gl_filters 
*filters)
     struct vlc_gl_filter_priv *priv = NULL;
     struct vlc_gl_filter_priv *subfilter_priv;
 
+    const opengl_vtable_t *vt = &filters->api->vt;
+
+    /* Save the current bindings to restore them at the end */
+    GLint renderbuffer;
+    GLint draw_framebuffer;
+    vt->GetIntegerv(GL_RENDERBUFFER_BINDING, &renderbuffer);
+    vt->GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &draw_framebuffer);
+
     vlc_list_foreach(priv, &filters->list, node)
     {
         /* Compute the highest msaa_level among the filter and its subfilters 
*/
@@ -426,6 +432,10 @@ vlc_gl_filters_InitFramebuffers(struct vlc_gl_filters 
*filters)
         }
     }
 
+    /* Restore bindings */
+    vt->BindFramebuffer(GL_DRAW_FRAMEBUFFER, draw_framebuffer);
+    vt->BindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
+
     return VLC_SUCCESS;
 }
 

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to