From 61ee2685c040f5f85ab37190d4193893957fb969 Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Tue, 14 Mar 2017 14:15:00 +1100 Subject: [PATCH] gl: GL_ARRAY_BUFFER is not a part of VAO state As a result we need to bind it on every draw in order to have the correct state in the GL state machine. --- ext/gl/caopengllayersink.m | 6 ++---- ext/gl/gltestsrc.c | 6 ++---- ext/gl/gstglfiltercube.c | 6 ++---- ext/gl/gstglimagesink.c | 6 ++---- ext/gl/gstgloverlay.c | 10 +++------- ext/gl/gstgltransformation.c | 10 +++------- gst-libs/gst/gl/gstglcolorconvert.c | 6 ++---- gst-libs/gst/gl/gstglfilter.c | 14 ++------------ gst-libs/gst/gl/gstglviewconvert.c | 6 ++---- tests/check/libs/gstglcontext.c | 6 ++---- tests/check/libs/gstglupload.c | 6 ++---- 11 files changed, 24 insertions(+), 58 deletions(-) diff --git a/ext/gl/caopengllayersink.m b/ext/gl/caopengllayersink.m index 1e42034ac5..fc96258b97 100644 --- a/ext/gl/caopengllayersink.m +++ b/ext/gl/caopengllayersink.m @@ -995,8 +995,7 @@ gst_ca_opengl_layer_sink_on_draw (GstCAOpenGLLayerSink * ca_sink) if (gl->GenVertexArrays) gl->BindVertexArray (ca_sink->vao); - else - _bind_buffer (ca_sink); + _bind_buffer (ca_sink); gl->ActiveTexture (GL_TEXTURE0); gl->BindTexture (GL_TEXTURE_2D, ca_sink->redisplay_texture); @@ -1006,8 +1005,7 @@ gst_ca_opengl_layer_sink_on_draw (GstCAOpenGLLayerSink * ca_sink) if (gl->GenVertexArrays) gl->BindVertexArray (0); - else - _unbind_buffer (ca_sink); + _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 87e302c550..ac845c68f0 100644 --- a/ext/gl/gltestsrc.c +++ b/ext/gl/gltestsrc.c @@ -213,16 +213,14 @@ _src_shader_fill_bound_fbo (gpointer impl) if (gl->GenVertexArrays) gl->BindVertexArray (src->vao); - else - _bind_buffer (src); + _bind_buffer (src); gl->DrawElements (GL_TRIANGLES, src->n_indices, GL_UNSIGNED_SHORT, (gpointer) (gintptr) src->index_offset); if (gl->GenVertexArrays) gl->BindVertexArray (0); - else - _unbind_buffer (src); + _unbind_buffer (src); gst_gl_context_clear_shader (src->base.context); diff --git a/ext/gl/gstglfiltercube.c b/ext/gl/gstglfiltercube.c index 0d58656466..735d45e5ed 100644 --- a/ext/gl/gstglfiltercube.c +++ b/ext/gl/gstglfiltercube.c @@ -476,15 +476,13 @@ _callback (gpointer stuff) if (gl->GenVertexArrays) gl->BindVertexArray (cube_filter->vao); - else - _bind_buffer (cube_filter); + _bind_buffer (cube_filter); gl->DrawElements (GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, 0); if (gl->GenVertexArrays) gl->BindVertexArray (0); - else - _unbind_buffer (cube_filter); + _unbind_buffer (cube_filter); gl->Disable (GL_DEPTH_TEST); diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c index 2b20b1e2c8..1c8d314f2c 100644 --- a/ext/gl/gstglimagesink.c +++ b/ext/gl/gstglimagesink.c @@ -2228,8 +2228,7 @@ gst_glimage_sink_on_draw (GstGLImageSink * gl_sink) if (gl->GenVertexArrays) gl->BindVertexArray (gl_sink->vao); - else - _bind_buffer (gl_sink); + _bind_buffer (gl_sink); gl->ActiveTexture (GL_TEXTURE0); gl->BindTexture (gl_target, gl_sink->redisplay_texture); @@ -2258,8 +2257,7 @@ gst_glimage_sink_on_draw (GstGLImageSink * gl_sink) if (gl->GenVertexArrays) gl->BindVertexArray (0); - else - _unbind_buffer (gl_sink); + _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 9846f53654..8c21bac773 100644 --- a/ext/gl/gstgloverlay.c +++ b/ext/gl/gstgloverlay.c @@ -522,9 +522,7 @@ gst_gl_overlay_callback (GstGLFilter * filter, GstGLMemory * in_tex, GL_STATIC_DRAW); } - if (!gl->GenVertexArrays || overlay->geometry_change) { - _bind_buffer (overlay, overlay->overlay_vbo); - } + _bind_buffer (overlay, overlay->overlay_vbo); gl->BindTexture (GL_TEXTURE_2D, image_tex); gst_gl_shader_set_uniform_1f (overlay->shader, "alpha", overlay->alpha); @@ -539,11 +537,9 @@ gst_gl_overlay_callback (GstGLFilter * filter, GstGLMemory * in_tex, ret = TRUE; out: - if (gl->GenVertexArrays) { + if (gl->GenVertexArrays) gl->BindVertexArray (0); - } else { - _unbind_buffer (overlay); - } + _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 eec262bb30..f6c9e3f26e 100644 --- a/ext/gl/gstgltransformation.c +++ b/ext/gl/gstgltransformation.c @@ -960,19 +960,15 @@ gst_gl_transformation_callback (gpointer stuff) if (gl->GenVertexArrays) gl->BindVertexArray (transformation->vao); - if (transformation->caps_change) { + if (transformation->caps_change) _upload_vertices (transformation); - _bind_buffer (transformation); - } else if (!gl->GenVertexArrays) { - _bind_buffer (transformation); - } + _bind_buffer (transformation); gl->DrawElements (GL_TRIANGLE_STRIP, 5, GL_UNSIGNED_SHORT, 0); if (gl->GenVertexArrays) gl->BindVertexArray (0); - else - _unbind_buffer (transformation); + _unbind_buffer (transformation); gst_gl_context_clear_shader (GST_GL_BASE_FILTER (filter)->context); transformation->caps_change = FALSE; diff --git a/gst-libs/gst/gl/gstglcolorconvert.c b/gst-libs/gst/gl/gstglcolorconvert.c index b04e414bbd..4373be5d33 100644 --- a/gst-libs/gst/gl/gstglcolorconvert.c +++ b/gst-libs/gst/gl/gstglcolorconvert.c @@ -2476,8 +2476,7 @@ _do_convert_draw (GstGLContext * context, GstGLColorConvert * convert) if (gl->BindVertexArray) gl->BindVertexArray (convert->priv->vao); - else - _bind_buffer (convert); + _bind_buffer (convert); for (i = c_info->in_n_textures - 1; i >= 0; i--) { gchar *scale_name = g_strdup_printf ("tex_scale%u", i); @@ -2501,8 +2500,7 @@ _do_convert_draw (GstGLContext * context, GstGLColorConvert * convert) if (gl->BindVertexArray) gl->BindVertexArray (0); - else - _unbind_buffer (convert); + _unbind_buffer (convert); if (gl->DrawBuffer) gl->DrawBuffer (GL_NONE); diff --git a/gst-libs/gst/gl/gstglfilter.c b/gst-libs/gst/gl/gstglfilter.c index f0c02cf734..61cce02868 100644 --- a/gst-libs/gst/gl/gstglfilter.c +++ b/gst-libs/gst/gl/gstglfilter.c @@ -1203,26 +1203,16 @@ gst_gl_filter_draw_fullscreen_quad (GstGLFilter * filter) gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, filter->vbo_indices); gl->BufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof (indices), indices, GL_STATIC_DRAW); - - if (gl->GenVertexArrays) { - _bind_buffer (filter); - gl->BindVertexArray (0); - } - - gl->BindBuffer (GL_ARRAY_BUFFER, 0); - gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0); } if (gl->GenVertexArrays) gl->BindVertexArray (filter->vao); - else - _bind_buffer (filter); + _bind_buffer (filter); gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0); if (gl->GenVertexArrays) gl->BindVertexArray (0); - else - _unbind_buffer (filter); + _unbind_buffer (filter); } } diff --git a/gst-libs/gst/gl/gstglviewconvert.c b/gst-libs/gst/gl/gstglviewconvert.c index 2d119e6114..86f877e132 100644 --- a/gst-libs/gst/gl/gstglviewconvert.c +++ b/gst-libs/gst/gl/gstglviewconvert.c @@ -1923,8 +1923,7 @@ _do_view_convert_draw (GstGLContext * context, GstGLViewConvert * viewconvert) if (gl->BindVertexArray) gl->BindVertexArray (priv->vao); - else - _bind_buffer (viewconvert); + _bind_buffer (viewconvert); if (in_mode == GST_VIDEO_MULTIVIEW_MODE_SEPARATED || in_mode == GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME) { @@ -1944,8 +1943,7 @@ _do_view_convert_draw (GstGLContext * context, GstGLViewConvert * viewconvert) if (gl->BindVertexArray) gl->BindVertexArray (0); - else - _unbind_buffer (viewconvert); + _unbind_buffer (viewconvert); if (gl->DrawBuffer) gl->DrawBuffer (GL_NONE); /* we are done with the shader */ diff --git a/tests/check/libs/gstglcontext.c b/tests/check/libs/gstglcontext.c index 96c5d92cd3..c0b91178c0 100644 --- a/tests/check/libs/gstglcontext.c +++ b/tests/check/libs/gstglcontext.c @@ -239,15 +239,13 @@ blit_tex (gpointer data) if (gl->GenVertexArrays) gl->BindVertexArray (vao); - else - _bind_buffer (context); + _bind_buffer (context); gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0); if (gl->GenVertexArrays) gl->BindVertexArray (0); - else - _unbind_buffer (context); + _unbind_buffer (context); return TRUE; } diff --git a/tests/check/libs/gstglupload.c b/tests/check/libs/gstglupload.c index 7508cf5b95..d03691685d 100644 --- a/tests/check/libs/gstglupload.c +++ b/tests/check/libs/gstglupload.c @@ -237,8 +237,7 @@ blit_tex (gpointer data) if (gl->GenVertexArrays) gl->BindVertexArray (vao); - else - _bind_buffer (context); + _bind_buffer (context); gl->ActiveTexture (GL_TEXTURE0); gl->BindTexture (GL_TEXTURE_2D, tex_id); @@ -248,8 +247,7 @@ blit_tex (gpointer data) if (gl->GenVertexArrays) gl->BindVertexArray (0); - else - _unbind_buffer (context); + _unbind_buffer (context); return TRUE; }