gl: fixup vao and vbo usage for legacy GL
authorMatthew Waters <matthew@centricular.com>
Thu, 11 Dec 2014 07:15:02 +0000 (18:15 +1100)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 9 Dec 2017 19:31:52 +0000 (19:31 +0000)
ext/gl/gstglfiltercube.c
ext/gl/gstglimagesink.c
ext/gl/gstgloverlay.c
ext/gl/gstgltransformation.c
ext/gl/gstglvideomixer.c
gst-libs/gst/gl/gstglfilter.c

index c7c704a90a191b61169c8d8e79a2d38b67983b6f..83895549d417d80cbcd0ebc0c0ad6cc970dd859f 100644 (file)
@@ -468,6 +468,7 @@ _callback (gpointer stuff)
 
     if (gl->GenVertexArrays) {
       _bind_buffer (cube_filter);
+      gl->BindBuffer (GL_ARRAY_BUFFER, 0);
     }
   }
 
index 4df435e8d5fec4cebf4ed3b2a026cbec9dd68366..240025c5af55157c9d6e24b8235e1536936e8977 100644 (file)
@@ -1215,8 +1215,12 @@ gst_glimage_sink_thread_init_redisplay (GstGLImageSink * gl_sink)
   gl->GenBuffers (1, &gl_sink->vertex_buffer);
   _bind_buffer (gl_sink);
 
-  if (gl->GenVertexArrays)
+  if (gl->GenVertexArrays) {
     gl->BindVertexArray (0);
+    gl->BindBuffer (GL_ARRAY_BUFFER, 0);
+  } else {
+    _unbind_buffer (gl_sink);
+  }
 }
 
 static void
@@ -1229,8 +1233,10 @@ gst_glimage_sink_cleanup_glthread (GstGLImageSink * gl_sink)
     gl_sink->redisplay_shader = NULL;
   }
 
-  if (gl_sink->vao)
+  if (gl_sink->vao) {
     gl->DeleteVertexArrays (1, &gl_sink->vao);
+    gl_sink->vao = 0;
+  }
 }
 
 static void
index 93bd9c1499ded0f97cb91ad70ede9cbad58d82bc..fb3f9fc3122889e6bb19bc66b53e8a0b268bc4f7 100644 (file)
@@ -532,6 +532,7 @@ gst_gl_overlay_callback (gint width, gint height, guint texture, gpointer stuff)
     if (overlay->geometry_change)
       _bind_buffer (overlay, overlay->overlay_vbo);
     gl->BindVertexArray (overlay->overlay_vao);
+    gl->BindBuffer (GL_ARRAY_BUFFER, 0);
   } else {
     _bind_buffer (overlay, overlay->overlay_vbo);
   }
index ec097d0a13a52bcd3cb9334406de846bb88c85d5..6bc16b344fd792b375d16fb6a7cf560d8d3e106a 100644 (file)
@@ -465,8 +465,6 @@ _upload_vertices (GstGLTransformation * transformation)
 
   gl->BufferData (GL_ARRAY_BUFFER, 4 * 6 * sizeof (GLfloat), vertices,
       GL_STATIC_DRAW);
-
-  gl->BindBuffer (GL_ARRAY_BUFFER, 0);
 }
 
 static void
@@ -546,11 +544,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);
 
-  if (!gl->GenVertexArrays || transformation->caps_change)
+    if (gl->GenVertexArrays)
+      gl->BindBuffer (GL_ARRAY_BUFFER, 0);
+  } else if (!gl->GenVertexArrays) {
     _bind_buffer (transformation);
+  }
 
   gl->DrawElements (GL_TRIANGLE_STRIP, 5, GL_UNSIGNED_SHORT, indices);
 
index f16f6d325f3d39b69170531bfef206a3b2668351..d673daee3252a8a98209b176e108250f3d9f811e 100644 (file)
@@ -747,9 +747,8 @@ gst_gl_video_mixer_callback (gpointer stuff)
 
   if (gl->GenVertexArrays)
     gl->BindVertexArray (0);
-  else
-    gl->BindBuffer (GL_ARRAY_BUFFER, 0);
 
+  gl->BindBuffer (GL_ARRAY_BUFFER, 0);
   gl->BindTexture (GL_TEXTURE_2D, 0);
 
   gl->Disable (GL_BLEND);
index 9b126efaf7c74860d004e3a8b31b55e618212ac9..9ca6456d6b2c382118c52937c9f42b5293a2dab5 100644 (file)
@@ -1596,6 +1596,7 @@ gst_gl_filter_draw_texture (GstGLFilter * filter, GLuint texture,
 
       if (gl->GenVertexArrays) {
         _bind_buffer (filter);
+        gl->BindBuffer (GL_ARRAY_BUFFER, 0);
       }
     }