mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 09:40:37 +00:00
glshader: add glBindFragDataLocation
There are some cases where it's needed for binding in/out variables in shaders. e.g. glsl 150 (gl 3.2) doesn't support the 'layout (location = ?)' specifiers in the shader source so we have to bind them ourselves.
This commit is contained in:
parent
2125124755
commit
d38587c142
3 changed files with 31 additions and 0 deletions
|
@ -362,3 +362,13 @@ GST_GL_EXT_FUNCTION (void, UniformMatrix3x4fv,
|
||||||
GST_GL_EXT_FUNCTION (void, UniformMatrix4x3fv,
|
GST_GL_EXT_FUNCTION (void, UniformMatrix4x3fv,
|
||||||
(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value))
|
(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value))
|
||||||
GST_GL_EXT_END ()
|
GST_GL_EXT_END ()
|
||||||
|
|
||||||
|
GST_GL_EXT_BEGIN (bind_frag_data,
|
||||||
|
GST_GL_API_OPENGL | GST_GL_API_OPENGL3,
|
||||||
|
3, 0,
|
||||||
|
255, 255,
|
||||||
|
"\0",
|
||||||
|
"\0")
|
||||||
|
GST_GL_EXT_FUNCTION (void, BindFragDataLocation,
|
||||||
|
(GLuint program, GLuint index, const GLchar * name))
|
||||||
|
GST_GL_EXT_END ()
|
||||||
|
|
|
@ -1306,3 +1306,23 @@ gst_gl_shader_bind_attribute_location (GstGLShader * shader, GLuint index,
|
||||||
|
|
||||||
gl->BindAttribLocation (priv->program_handle, index, name);
|
gl->BindAttribLocation (priv->program_handle, index, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gst_gl_shader_bind_frag_data_location (GstGLShader * shader,
|
||||||
|
guint index, const gchar * name)
|
||||||
|
{
|
||||||
|
GstGLShaderPrivate *priv;
|
||||||
|
GstGLFuncs *gl;
|
||||||
|
|
||||||
|
g_return_if_fail (shader != NULL);
|
||||||
|
if (!_ensure_program (shader))
|
||||||
|
g_return_if_fail (shader->priv->program_handle);
|
||||||
|
priv = shader->priv;
|
||||||
|
gl = shader->context->gl_vtable;
|
||||||
|
g_return_if_fail (gl->BindFragDataLocation);
|
||||||
|
|
||||||
|
GST_TRACE_OBJECT (shader, "binding program %i frag data \'%s\' location %i",
|
||||||
|
(int) priv->program_handle, name, index);
|
||||||
|
|
||||||
|
gl->BindFragDataLocation (priv->program_handle, index, name);
|
||||||
|
}
|
||||||
|
|
|
@ -104,6 +104,7 @@ void gst_gl_shader_set_uniform_matrix_4x3fv (GstGLShader *shader, const gchar *n
|
||||||
|
|
||||||
gint gst_gl_shader_get_attribute_location (GstGLShader *shader, const gchar *name);
|
gint gst_gl_shader_get_attribute_location (GstGLShader *shader, const gchar *name);
|
||||||
void gst_gl_shader_bind_attribute_location (GstGLShader * shader, guint index, const gchar * name);
|
void gst_gl_shader_bind_attribute_location (GstGLShader * shader, guint index, const gchar * name);
|
||||||
|
void gst_gl_shader_bind_frag_data_location (GstGLShader * shader, guint index, const gchar * name);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue