diff options
Diffstat (limited to 'gst-libs/gst/vaapi/gstvaapiutils_glx.c')
-rw-r--r-- | gst-libs/gst/vaapi/gstvaapiutils_glx.c | 81 |
1 files changed, 64 insertions, 17 deletions
diff --git a/gst-libs/gst/vaapi/gstvaapiutils_glx.c b/gst-libs/gst/vaapi/gstvaapiutils_glx.c index 974d3a03..37e9375d 100644 --- a/gst-libs/gst/vaapi/gstvaapiutils_glx.c +++ b/gst-libs/gst/vaapi/gstvaapiutils_glx.c @@ -465,25 +465,15 @@ gl_swap_buffers (GLContextState * cs) cs->swapped_buffers = TRUE; } -/** - * gl_bind_texture: - * @ts: a #GLTextureState - * @target: the target to which the texture is bound - * @texture: the name of a texture - * - * Binds @texture to the specified @target, while recording the - * previous state in @ts. - * - * Return value: %TRUE on success - */ -gboolean -gl_bind_texture (GLTextureState * ts, GLenum target, GLuint texture) +static inline gboolean +_init_texture_state (GLTextureState * ts, GLenum target, GLuint texture, + gboolean enabled) { GLenum binding; ts->target = target; - if (glIsEnabled (target)) { + if (enabled) { binding = gl_get_texture_binding (target); if (!binding) return FALSE; @@ -491,15 +481,18 @@ gl_bind_texture (GLTextureState * ts, GLenum target, GLuint texture) return FALSE; ts->was_enabled = TRUE; ts->was_bound = texture == ts->old_texture; - if (ts->was_bound) - return TRUE; } else { - glEnable (target); ts->old_texture = 0; ts->was_enabled = FALSE; ts->was_bound = FALSE; } + return TRUE; +} + +static inline gboolean +_bind_enabled_texture (GLenum target, GLuint texture) +{ gl_purge_errors (); glBindTexture (target, texture); if (gl_check_error ()) @@ -508,6 +501,60 @@ gl_bind_texture (GLTextureState * ts, GLenum target, GLuint texture) } /** + * gl_bind_texture: + * @ts: a #GLTextureState + * @target: the target to which the texture is bound + * @texture: the name of a texture + * + * Binds @texture to the specified @target, while recording the + * previous state in @ts. + * + * Return value: %TRUE on success + */ +gboolean +gl_bind_texture (GLTextureState * ts, GLenum target, GLuint texture) +{ + gboolean enabled; + + enabled = (gboolean) glIsEnabled (target); + if (!_init_texture_state (ts, target, texture, enabled)) + return FALSE; + if (ts->was_bound) + return TRUE; + if (!enabled) + glEnable (target); + + return _bind_enabled_texture (target, texture); +} + +/** + * gl3_bind_texture_2d: + * @ts: a #GLTextureState + * @target: the target to which the texture is bound + * @texture: the name of a texture + * + * Binds @texture to the specified @target, while recording the + * previous state in @ts. + * + * This function is for OpenGL3 API and for targets type GL_TEXTURE_2D. + * + * Return value: %TRUE on success + */ +gboolean +gl3_bind_texture_2d (GLTextureState * ts, GLenum target, GLuint texture) +{ + if (target != GL_TEXTURE_2D) + return FALSE; + + if (!_init_texture_state (ts, target, texture, TRUE)) + return FALSE; + if (ts->was_bound) + return TRUE; + + return _bind_enabled_texture (target, texture); +} + +/** * gl_unbind_texture: * @ts: a #GLTextureState * |