summaryrefslogtreecommitdiff
path: root/gst-libs/gst/vaapi/gstvaapiutils_glx.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst-libs/gst/vaapi/gstvaapiutils_glx.c')
-rw-r--r--gst-libs/gst/vaapi/gstvaapiutils_glx.c81
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
*