qt: use our function table instead of directly calling gl functions

Otherwise when building with --as-needed we would need to link to
a GL or GLES library.

https://bugzilla.gnome.org/show_bug.cgi?id=754732
This commit is contained in:
Matthew Waters 2015-09-10 00:00:11 +10:00
parent e99c591dc9
commit 579b734346

View file

@ -81,6 +81,7 @@ GstQSGTexture::setBuffer (GstBuffer * buffer)
void void
GstQSGTexture::bind () GstQSGTexture::bind ()
{ {
const GstGLFuncs *gl;
GstGLContext *context; GstGLContext *context;
GstGLSyncMeta *sync_meta; GstGLSyncMeta *sync_meta;
GstMemory *mem; GstMemory *mem;
@ -95,6 +96,9 @@ GstQSGTexture::bind ()
if (!this->mem_) if (!this->mem_)
return; return;
g_assert (this->qt_context_);
gl = this->qt_context_->gl_vtable;
/* FIXME: should really lock the memory to prevent write access */ /* FIXME: should really lock the memory to prevent write access */
if (!gst_video_frame_map (&this->v_frame, &this->v_info, this->buffer_, if (!gst_video_frame_map (&this->v_frame, &this->v_info, this->buffer_,
(GstMapFlags) (GST_MAP_READ | GST_MAP_GL))) { (GstMapFlags) (GST_MAP_READ | GST_MAP_GL))) {
@ -113,13 +117,12 @@ GstQSGTexture::bind ()
gst_gl_sync_meta_set_sync_point (sync_meta, context); gst_gl_sync_meta_set_sync_point (sync_meta, context);
g_assert (this->qt_context_);
gst_gl_sync_meta_wait (sync_meta, this->qt_context_); gst_gl_sync_meta_wait (sync_meta, this->qt_context_);
tex_id = *(guint *) this->v_frame.data[0]; tex_id = *(guint *) this->v_frame.data[0];
GST_LOG ("%p binding Qt texture %u", this, tex_id); GST_LOG ("%p binding Qt texture %u", this, tex_id);
glBindTexture (GL_TEXTURE_2D, tex_id); gl->BindTexture (GL_TEXTURE_2D, tex_id);
gst_video_frame_unmap (&this->v_frame); gst_video_frame_unmap (&this->v_frame);
} }