Matthew Waters
5f87cc0b65
glcontext: add a method to add a context to another share group
...
Intended for use with wrapped contexts that are created shared with gst's
gl contexts in order to manage the internal sharegroup state correctly.
e.g. with caopengllayer (which is used in glimagesink and caopengllayersink
on OS X), we create a CGL context from the gst context and the sharing state
was not being correctly set on either GL context and gst_gl_context_is_shared()
was always returning FALSE.
With 11fb4fff80
only flushing with multiple
shared contexts, the required flush was not occuring causing screen
corruption or stuttering.
Note: this didn't affect GST_GL_API=opengl pipelines
https://bugzilla.gnome.org/show_bug.cgi?id=762620
2017-12-09 19:32:17 +00:00
Matthew Waters
7dcdb1d29c
glcontext: don't enable GL debug for messages that won't be logged
...
This is an optimization to avoid pointless string processing.
2017-12-09 19:32:16 +00:00
Alessandro Decina
7e1a42ce55
gstglcontext: micro optimization to gst_gl_context_thread_add
...
Invoke the callback right away when called on the context thread. Removes
overhead when nesting libgstgl calls (for example when working with the sync
meta).
2017-12-09 19:32:16 +00:00
Matthew Waters
d41c132dfa
glcontext: back out unintended lost_context changes
2017-12-09 19:32:15 +00:00
Matthew Waters
5d2ddf7664
egl: implement selecting opengl3 contexts
2017-12-09 19:32:15 +00:00
Matthew Waters
472970324c
glcontext: implement checking whether a context has been shared
...
Some operations are unnecessary when running with only a single GL
context.
e.g. glFlush when setting a fence object as the flush happens on wait.
API: gst_gl_context_is_shared
2017-12-09 19:32:14 +00:00
Sebastian Dröge
5d38c24aaa
glcontext: Add some debug output when the GL thread is actually running
2017-12-09 19:32:13 +00:00
Sebastian Dröge
039865fc03
glcontext: Signal context creation from inside the context loop and use g_thread_join() instead of a custom condition variable
...
Also protect against spurious condition variable wakeups during context
creation.
2017-12-09 19:32:13 +00:00
Matthew Waters
764c4a33bc
gl: fix usage of string.h and stdio.h functions without including the headers
...
e.g:
gstglcontext_egl.c:613:7: error: implicit declaration of function 'strcmp'
[-Werror=implicit-function-declaration]
if (strcmp (G_MODULE_SUFFIX, "so") == 0)
2017-12-09 19:32:09 +00:00
Matthew Waters
06de6998e5
gl: be consistent in gobject boilerpate
...
GST_GL_IS_* vs GST_IS_GL_*
git grep -l 'GST_GL_IS_' | xargs sed -i 's/GST_GL_IS_/GST_IS_GL_/g'
2017-12-09 19:32:09 +00:00
Matthew Waters
16ee1636dc
gl: move debugging related functions to their own file
2017-12-09 19:32:09 +00:00
Matthew Waters
37047a1050
glcontext: fixup strstr lengths so we don't overrun
2017-12-09 19:32:09 +00:00
Tim-Philipp Müller
06a1954165
gtk, qt, gl: fix typo in debug and error messages
2017-12-09 19:32:08 +00:00
Justin Kim
c8628fc43d
glcontext: add specific error message when missing GL_SHADING_LANGUAGE_VERSION
...
GL_SHADING_LANGUAGE_VERSION was introduced since ES 2.0, but in some
android emulator doesn't support this feature. To prevent confusion for
developer, the error message need to be more clear.
https://bugzilla.gnome.org/show_bug.cgi?id=753905
2017-12-09 19:32:08 +00:00
Matthew Waters
9587eb477d
glcontext: pass display to implentation's _new()
...
This allows the context to fail creation based on incompatible
display type's. e.g. glx context with an wayland display handle.
https://bugzilla.gnome.org/show_bug.cgi?id=752743
2017-12-09 19:32:06 +00:00
Julien Isorce
ac469a0d28
gl: move GL_NUM_EXTENSIONS definition after gl.h
...
https://bugzilla.gnome.org/show_bug.cgi?id=752743
2017-12-09 19:32:06 +00:00
Matthew Waters
66407b9877
glcontext: fix get_current_gl_api on x11/nvidia drivers
...
They require to get_proc_address some functions through the
platform specific {glX,egl}GetProcAddress rather than the default
GL library symbol lookup.
2017-12-09 19:32:05 +00:00
Matthew Waters
cfa9b94045
glcontext: consolidate get_proc_address function definition
...
Pass the GstGLAPI directly.
2017-12-09 19:32:05 +00:00
Matthew Waters
78957c45c2
glcontext: track sharedness with a cookie
...
The previous approach of traversing the other_context weak ref tree was
1. Less performant
2. Incorrect for context destruction removing a link in the tree
Example of 2:
c1 = context_create (NULL)
c2 = context_create (c1)
c3 = context_create (c2)
context_can_share (c1, c3) == TRUE
context_destroy (c2)
unref (c2)
context_can_share (c1, c3) returns FALSE when it should be TRUE!
This does not remove the restriction that context sharedness can only
be tracked between GstGLContext's.
2017-12-09 19:32:05 +00:00
Matthew Waters
2df7e0f9de
glcontext: use the debug object variant for completeness
2017-12-09 19:32:05 +00:00
Julien Isorce
9b1eb32c49
gl: initialize output params to 0 before calling gl functions
...
The client side API of the Chromium's GPU Process has asserts
in debug mode that check that output params are initialized to 0.
2017-12-09 19:32:05 +00:00
Julien Isorce
38a1939ea1
glcontext: move display from priv
...
https://bugzilla.gnome.org/show_bug.cgi?id=750310
2017-12-09 19:32:04 +00:00
Julien Isorce
cbc3f1242f
Revert "glcontext: add gst_gl_context_set_display helper"
...
This reverts commit 71b8103cbd
.
2017-12-09 19:32:04 +00:00
Sebastian Dröge
1a995d1676
gl: OES_vertex_array_object is improperly implemented on PowerVR SGX 544MP
...
https://bugzilla.gnome.org/show_bug.cgi?id=750185
2017-12-09 19:32:03 +00:00
Thiago Santos
33b5cd5426
Fix a common typo: retreive -> retrieve
...
Seems to have been copy pasted around a few places
2017-12-09 19:32:03 +00:00
Julien Isorce
a81de2f282
glcontext: initialize debug in class_init
...
Useful if one uses gst_gl_context_egl_new directly
instead of gst_gl_context_new.
2017-12-09 19:32:02 +00:00
Julien Isorce
5849a9f657
glcontext: add gst_gl_context_set_display helper
2017-12-09 19:32:02 +00:00
Matthew Waters
d4894caacf
glcontext: require a shader version to initialize.
...
It's very near pointless to try our GL implementation without shaders.
https://bugzilla.gnome.org/show_bug.cgi?id=749284
2017-12-09 19:32:02 +00:00
Matthew Waters
16522a737c
glcontext: propagate the version/extension failure upwards
...
Otherwise the calling code has no idea that the context failed to
be created fully.
https://bugzilla.gnome.org/show_bug.cgi?id=749284
2017-12-09 19:32:01 +00:00
Matthew Waters
03908c679e
gldisplay: synchronize the searching and creation of GstGLContext's
...
Ootherwise we could end up with multiple elements in different chains
each creating a context. Fixes context creation with glvideomixer.
2017-12-09 19:31:59 +00:00
Matthew Waters
0b5c7e8b49
gl/docs: update some doc comments
2017-12-09 19:31:58 +00:00
Matthew Waters
d44594c622
glcontext: store the thread current context
2017-12-09 19:31:57 +00:00
Edward Hervey
f56c4c541a
gl: Add/Update more debug statements
...
Where possible, use the _OBJECT variants in order to track better from
which object the debug statement is coming from
Define (and use) GST_CAT_DEFAULT where applicable
Use GST_PTR_FORMAT where applicable
2017-12-09 19:31:54 +00:00
Matthew Waters
bef3f020a6
glcontext: allow wrapped contexts to be utilised like non-wrapped contexts
...
Fill in the missing pieces like get_proc_address, the gl function vtable
2017-12-09 19:31:52 +00:00
Julien Isorce
690b20b9f4
glcontext: try cgl before glx
...
It was already done by commit
f506e80686
but it has been broken by commit
45ec777cea
2017-12-09 19:31:51 +00:00
Matthew Waters
bbac8bf8d0
glcontext: require GL_ARB_ES2_compatibility for opengl3
...
until we generate gl3 compliant shaders
https://bugzilla.gnome.org/show_bug.cgi?id=740012
2017-12-09 19:31:51 +00:00
Matthew Waters
4bd62ebb03
gldisplay: implement runtime GL api filtering
...
Needed so that the pipeline/application can limit the choice of GL api
to what it supports
2017-12-09 19:31:51 +00:00
Ramprakash Jelari
c5804b9af5
glcontext: Fix unused variable warning by moving declaration where it is actually used
2017-12-09 19:31:50 +00:00
Vineeth T M
d747c65d4c
glcontext: build errors when GST_GL_HAVE_OPENGL is 0
...
Moving variables within #if GST_GL_HAVE_OPENGL, which are not going to be used otherwise.
and which are needed only when OpenGl is present
https://bugzilla.gnome.org/show_bug.cgi?id=740235
2017-12-09 19:31:50 +00:00
Matthew Waters
e2f61d20a2
glcontext: fail context creation if glGetString returns NULL
2017-12-09 19:31:49 +00:00
Matthew Waters
35e9b5ab8b
gl: sprinkle some Since markers
2017-12-09 19:31:49 +00:00
Matthew Waters
7d97a35139
glcontext: add more functionality to wrapped contexts
...
Implements get_current_context() and get_proc_address() for wrapped
contexts.
2017-12-09 19:31:49 +00:00
Matthew Waters
be5d0d81e4
glcontext: add api for retreiving the current context and api
...
that is current in the calling thread.
2017-12-09 19:31:48 +00:00
Edward Hervey
ef00d85f16
glcontext: Initialize variable
...
Avoids the following warning:
gstglcontext.c:647:58: error: 'prev' may be used uninitialized in
this function [-Werror=maybe-uninitialized]
2017-12-09 19:31:47 +00:00
Matthew Waters
ca476f03a8
glcontext: fixup error in sharegroup comment
2017-12-09 19:31:47 +00:00
Matthew Waters
817417c005
glcontext: detect the sharegroup case where the context are in different chains
...
In the end they will lead to the same root context in the tree so check that
for equality.
2017-12-09 19:31:47 +00:00
Matthew Waters
14630fac38
glcontext: add gst_gl_context_can_share
...
Which determines whether two GstGLContext's can share sharable
OpenGL resources.
2017-12-09 19:31:46 +00:00
Sebastian Dröge
9dd4f40ad6
gl: Let gst_gl_context_get_thread() return a new reference to the GThread
...
Otherwise it might go away in the meantime and the caller has some random pointer.
2017-12-09 19:31:46 +00:00
Tim-Philipp Müller
9cccbb315c
gl: add since markers for new API
2017-12-09 19:31:46 +00:00
Matthew Waters
4e75ceba46
glcontext: add API to retreive the thread that context is active in
2017-12-09 19:31:46 +00:00