From acc098a736949d465d7f77e5de94a75627209147 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 16 Jan 2019 14:09:18 +0200 Subject: [PATCH] gl: Only unbind buffers/vertex attrib arrays if we can't directly bind the vertex array to 0 Binding the vertex array to 0 will unbind everything else already. In the previous order older versions of the Intel GL driver caused errors to be printed for every single call when disabling the vertex attrib arrays after binding the vertex array to 0. --- ext/gl/caopengllayersink.m | 3 ++- ext/gl/gltestsrc.c | 3 ++- ext/gl/gstglfiltercube.c | 3 ++- ext/gl/gstglimagesink.c | 3 ++- ext/gl/gstgloverlay.c | 3 ++- ext/gl/gstgltransformation.c | 3 ++- ext/gl/gstglvideomixer.c | 15 ++++++++------- gst-libs/gst/gl/gstglcolorconvert.c | 3 ++- gst-libs/gst/gl/gstglfilter.c | 3 ++- gst-libs/gst/gl/gstglviewconvert.c | 3 ++- tests/check/libs/gstglcontext.c | 3 ++- tests/check/libs/gstglupload.c | 3 ++- 12 files changed, 30 insertions(+), 18 deletions(-) diff --git a/ext/gl/caopengllayersink.m b/ext/gl/caopengllayersink.m index 1cb72e5b98..5c7b47624f 100644 --- a/ext/gl/caopengllayersink.m +++ b/ext/gl/caopengllayersink.m @@ -1005,7 +1005,8 @@ gst_ca_opengl_layer_sink_on_draw (GstCAOpenGLLayerSink * ca_sink) if (gl->GenVertexArrays) gl->BindVertexArray (0); - _unbind_buffer (ca_sink); + else + _unbind_buffer (ca_sink); /* end default opengl scene */ GST_CA_OPENGL_LAYER_SINK_UNLOCK (ca_sink); diff --git a/ext/gl/gltestsrc.c b/ext/gl/gltestsrc.c index f6faea3b6e..c822103831 100644 --- a/ext/gl/gltestsrc.c +++ b/ext/gl/gltestsrc.c @@ -222,7 +222,8 @@ _src_shader_fill_bound_fbo (gpointer impl) if (gl->GenVertexArrays) gl->BindVertexArray (0); - _unbind_buffer (src); + else + _unbind_buffer (src); gst_gl_context_clear_shader (src->base.context); diff --git a/ext/gl/gstglfiltercube.c b/ext/gl/gstglfiltercube.c index 9e04ea0813..776aece1c0 100644 --- a/ext/gl/gstglfiltercube.c +++ b/ext/gl/gstglfiltercube.c @@ -484,7 +484,8 @@ _callback (gpointer stuff) if (gl->GenVertexArrays) gl->BindVertexArray (0); - _unbind_buffer (cube_filter); + else + _unbind_buffer (cube_filter); gl->Disable (GL_DEPTH_TEST); diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c index aa0ae40b7a..3fcdcedd81 100644 --- a/ext/gl/gstglimagesink.c +++ b/ext/gl/gstglimagesink.c @@ -2299,7 +2299,8 @@ gst_glimage_sink_on_draw (GstGLImageSink * gl_sink) if (gl->GenVertexArrays) gl->BindVertexArray (0); - _unbind_buffer (gl_sink); + else + _unbind_buffer (gl_sink); if (gl_sink->ignore_alpha) gl->Disable (GL_BLEND); diff --git a/ext/gl/gstgloverlay.c b/ext/gl/gstgloverlay.c index a2c9fbb20d..72f6ff4d8d 100644 --- a/ext/gl/gstgloverlay.c +++ b/ext/gl/gstgloverlay.c @@ -545,7 +545,8 @@ gst_gl_overlay_callback (GstGLFilter * filter, GstGLMemory * in_tex, out: if (gl->GenVertexArrays) gl->BindVertexArray (0); - _unbind_buffer (overlay); + else + _unbind_buffer (overlay); gst_gl_context_clear_shader (GST_GL_BASE_FILTER (filter)->context); diff --git a/ext/gl/gstgltransformation.c b/ext/gl/gstgltransformation.c index bb4bd2c6f3..dba8733467 100644 --- a/ext/gl/gstgltransformation.c +++ b/ext/gl/gstgltransformation.c @@ -961,7 +961,8 @@ gst_gl_transformation_callback (gpointer stuff) if (gl->GenVertexArrays) gl->BindVertexArray (0); - _unbind_buffer (transformation); + else + _unbind_buffer (transformation); gst_gl_context_clear_shader (GST_GL_BASE_FILTER (filter)->context); transformation->caps_change = FALSE; diff --git a/ext/gl/gstglvideomixer.c b/ext/gl/gstglvideomixer.c index 0306d22e53..1e14c5ed85 100644 --- a/ext/gl/gstglvideomixer.c +++ b/ext/gl/gstglvideomixer.c @@ -1613,15 +1613,16 @@ gst_gl_video_mixer_callback (gpointer stuff) video_mixer->output_geo_change = FALSE; GST_OBJECT_UNLOCK (video_mixer); - gl->DisableVertexAttribArray (attr_position_loc); - gl->DisableVertexAttribArray (attr_texture_loc); - - if (gl->GenVertexArrays) + if (gl->GenVertexArrays) { gl->BindVertexArray (0); + } else { + gl->DisableVertexAttribArray (attr_position_loc); + gl->DisableVertexAttribArray (attr_texture_loc); - gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0); - gl->BindBuffer (GL_ARRAY_BUFFER, 0); - gl->BindTexture (GL_TEXTURE_2D, 0); + gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0); + gl->BindBuffer (GL_ARRAY_BUFFER, 0); + gl->BindTexture (GL_TEXTURE_2D, 0); + } gl->Disable (GL_BLEND); diff --git a/gst-libs/gst/gl/gstglcolorconvert.c b/gst-libs/gst/gl/gstglcolorconvert.c index 3247735288..297d371c46 100644 --- a/gst-libs/gst/gl/gstglcolorconvert.c +++ b/gst-libs/gst/gl/gstglcolorconvert.c @@ -2589,7 +2589,8 @@ _do_convert_draw (GstGLContext * context, GstGLColorConvert * convert) if (gl->BindVertexArray) gl->BindVertexArray (0); - _unbind_buffer (convert); + else + _unbind_buffer (convert); if (gl->DrawBuffer) gl->DrawBuffer (GL_COLOR_ATTACHMENT0); diff --git a/gst-libs/gst/gl/gstglfilter.c b/gst-libs/gst/gl/gstglfilter.c index aba9daafe6..bb38fb6510 100644 --- a/gst-libs/gst/gl/gstglfilter.c +++ b/gst-libs/gst/gl/gstglfilter.c @@ -1251,6 +1251,7 @@ gst_gl_filter_draw_fullscreen_quad (GstGLFilter * filter) if (gl->GenVertexArrays) gl->BindVertexArray (0); - _unbind_buffer (filter); + else + _unbind_buffer (filter); } } diff --git a/gst-libs/gst/gl/gstglviewconvert.c b/gst-libs/gst/gl/gstglviewconvert.c index f057ce1ee0..63a67890ff 100644 --- a/gst-libs/gst/gl/gstglviewconvert.c +++ b/gst-libs/gst/gl/gstglviewconvert.c @@ -1928,7 +1928,8 @@ _do_view_convert_draw (GstGLContext * context, GstGLViewConvert * viewconvert) if (gl->BindVertexArray) gl->BindVertexArray (0); - _unbind_buffer (viewconvert); + else + _unbind_buffer (viewconvert); if (gl->DrawBuffer) gl->DrawBuffer (GL_COLOR_ATTACHMENT0); /* we are done with the shader */ diff --git a/tests/check/libs/gstglcontext.c b/tests/check/libs/gstglcontext.c index 37bac2ca57..bc2e40e3c4 100644 --- a/tests/check/libs/gstglcontext.c +++ b/tests/check/libs/gstglcontext.c @@ -246,7 +246,8 @@ blit_tex (gpointer data) if (gl->GenVertexArrays) gl->BindVertexArray (0); - _unbind_buffer (context); + else + _unbind_buffer (context); return TRUE; } diff --git a/tests/check/libs/gstglupload.c b/tests/check/libs/gstglupload.c index fe3efea5c5..516655fcb4 100644 --- a/tests/check/libs/gstglupload.c +++ b/tests/check/libs/gstglupload.c @@ -247,7 +247,8 @@ blit_tex (gpointer data) if (gl->GenVertexArrays) gl->BindVertexArray (0); - _unbind_buffer (context); + else + _unbind_buffer (context); return TRUE; }