summaryrefslogtreecommitdiff
path: root/gst-libs/gst/gl/gstglshader.h
blob: 8bda1683c628a5d6a9aa3a729cd38ba7c64b42a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/*
 * GStreamer
 * Copyright (C) 2008 Filippo Argiolas <filippo.argiolas@gmail.com>
 * Copyright (C) 2014 Julien Isorce <julien.isorce@collabora.co.uk>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 */

#ifndef __GST_GL_SHADER_H__
#define __GST_GL_SHADER_H__

#include <gst/gl/gstgl_fwd.h>

G_BEGIN_DECLS

GST_EXPORT
GType gst_gl_shader_get_type (void);
#define GST_TYPE_GL_SHADER         (gst_gl_shader_get_type())

/* FIXME: remove this when moving to -base */
#ifndef GST_DISABLE_DEPRECATED
#define GST_GL_TYPE_SHADER GST_TYPE_GL_SHADER
#endif
#define GST_GL_SHADER(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_TYPE_GL_SHADER, GstGLShader))
#define GST_GL_SHADER_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_TYPE_GL_SHADER, GstGLShaderClass))
#define GST_IS_GL_SHADER(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_TYPE_GL_SHADER))
#define GST_IS_GL_SHADER_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_TYPE_GL_SHADER))
#define GST_GL_SHADER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_TYPE_GL_SHADER, GstGLShaderClass))

struct _GstGLShader
{
  GstObject parent;

  GstGLContext *context;

  /*< private >*/
  GstGLShaderPrivate *priv;

  gpointer _padding[GST_PADDING];
};

struct _GstGLShaderClass {
  /*< private >*/
  GstObjectClass parent_class;
};

GST_EXPORT
GstGLShader * gst_gl_shader_new                     (GstGLContext *context);
GST_EXPORT
GstGLShader * gst_gl_shader_new_with_stages         (GstGLContext * context, GError ** error, ...);
GST_EXPORT
GstGLShader * gst_gl_shader_new_link_with_stages    (GstGLContext * context, GError ** error, ...);
GST_EXPORT
GstGLShader * gst_gl_shader_new_default             (GstGLContext * context, GError ** error);

GST_EXPORT
gboolean gst_gl_shader_attach                       (GstGLShader * shader, GstGLSLStage * stage);
GST_EXPORT
gboolean gst_gl_shader_attach_unlocked              (GstGLShader * shader, GstGLSLStage * stage);

GST_EXPORT
void     gst_gl_shader_detach                       (GstGLShader * shader, GstGLSLStage * stage);
GST_EXPORT
void     gst_gl_shader_detach_unlocked              (GstGLShader * shader, GstGLSLStage * stage);

GST_EXPORT
gboolean gst_gl_shader_compile_attach_stage         (GstGLShader * shader,
                                                     GstGLSLStage *stage,
                                                     GError ** error);
GST_EXPORT
gboolean gst_gl_shader_link                         (GstGLShader * shader, GError ** error);
GST_EXPORT
gboolean gst_gl_shader_is_linked                    (GstGLShader *shader);

GST_EXPORT
int gst_gl_shader_get_program_handle                (GstGLShader * shader);

GST_EXPORT
void gst_gl_shader_release                          (GstGLShader *shader);
GST_EXPORT
void gst_gl_shader_release_unlocked                 (GstGLShader * shader);
GST_EXPORT
void gst_gl_shader_use                              (GstGLShader *shader);
GST_EXPORT
void gst_gl_context_clear_shader                    (GstGLContext *context);

GST_EXPORT
void gst_gl_shader_set_uniform_1i           (GstGLShader *shader, const gchar *name, gint value);
GST_EXPORT
void gst_gl_shader_set_uniform_1iv          (GstGLShader *shader, const gchar *name, guint count, gint *value);
GST_EXPORT
void gst_gl_shader_set_uniform_1f           (GstGLShader *shader, const gchar *name, gfloat value);
GST_EXPORT
void gst_gl_shader_set_uniform_1fv          (GstGLShader *shader, const gchar *name, guint count, gfloat *value);
GST_EXPORT
void gst_gl_shader_set_uniform_2i           (GstGLShader *shader, const gchar *name, gint v0,     gint v1);
GST_EXPORT
void gst_gl_shader_set_uniform_2iv          (GstGLShader *shader, const gchar *name, guint count, gint *value);
GST_EXPORT
void gst_gl_shader_set_uniform_2f           (GstGLShader *shader, const gchar *name, gfloat v0,   gfloat v1);
GST_EXPORT
void gst_gl_shader_set_uniform_2fv          (GstGLShader *shader, const gchar *name, guint count, gfloat *value);
GST_EXPORT
void gst_gl_shader_set_uniform_3i           (GstGLShader *shader, const gchar *name, gint v0,     gint v1,       gint v2);
GST_EXPORT
void gst_gl_shader_set_uniform_3iv          (GstGLShader *shader, const gchar *name, guint count, gint * value);
GST_EXPORT
void gst_gl_shader_set_uniform_3f           (GstGLShader *shader, const gchar *name, gfloat v0,   gfloat v1,     gfloat v2);
GST_EXPORT
void gst_gl_shader_set_uniform_3fv          (GstGLShader *shader, const gchar *name, guint count, gfloat *value);
GST_EXPORT
void gst_gl_shader_set_uniform_4i           (GstGLShader *shader, const gchar *name, gint v0,     gint v1,       gint v2,   gint v3);
GST_EXPORT
void gst_gl_shader_set_uniform_4iv          (GstGLShader *shader, const gchar *name, guint count, gint *value);
GST_EXPORT
void gst_gl_shader_set_uniform_4f           (GstGLShader *shader, const gchar *name, gfloat v0,   gfloat v1,     gfloat v2, gfloat v3);
GST_EXPORT
void gst_gl_shader_set_uniform_4fv          (GstGLShader *shader, const gchar *name, guint count, gfloat *value);
GST_EXPORT
void gst_gl_shader_set_uniform_matrix_2fv   (GstGLShader *shader, const gchar *name, gint count, gboolean transpose, const gfloat* value);
GST_EXPORT
void gst_gl_shader_set_uniform_matrix_3fv   (GstGLShader *shader, const gchar *name, gint count, gboolean transpose, const gfloat* value);
GST_EXPORT
void gst_gl_shader_set_uniform_matrix_4fv   (GstGLShader *shader, const gchar *name, gint count, gboolean transpose, const gfloat* value);
#if GST_GL_HAVE_OPENGL
GST_EXPORT
void gst_gl_shader_set_uniform_matrix_2x3fv (GstGLShader *shader, const gchar *name, gint count, gboolean transpose, const gfloat* value);
GST_EXPORT
void gst_gl_shader_set_uniform_matrix_2x4fv (GstGLShader *shader, const gchar *name, gint count, gboolean transpose, const gfloat* value);
GST_EXPORT
void gst_gl_shader_set_uniform_matrix_3x2fv (GstGLShader *shader, const gchar *name, gint count, gboolean transpose, const gfloat* value);
GST_EXPORT
void gst_gl_shader_set_uniform_matrix_3x4fv (GstGLShader *shader, const gchar *name, gint count, gboolean transpose, const gfloat* value);
GST_EXPORT
void gst_gl_shader_set_uniform_matrix_4x2fv (GstGLShader *shader, const gchar *name, gint count, gboolean transpose, const gfloat* value);
GST_EXPORT
void gst_gl_shader_set_uniform_matrix_4x3fv (GstGLShader *shader, const gchar *name, gint count, gboolean transpose, const gfloat* value);
#endif

GST_EXPORT
gint gst_gl_shader_get_attribute_location  (GstGLShader *shader, const gchar *name);
GST_EXPORT
void gst_gl_shader_bind_attribute_location (GstGLShader * shader, guint index, const gchar * name);
GST_EXPORT
void gst_gl_shader_bind_frag_data_location (GstGLShader * shader, guint index, const gchar * name);

G_END_DECLS

#endif /* __GST_GL_SHADER_H__ */