1 | /* GSK - The GTK Scene Kit |
2 | * |
3 | * Copyright 2020 Red Hat Inc |
4 | * |
5 | * This library is free software; you can redistribute it and/or |
6 | * modify it under the terms of the GNU Lesser General Public |
7 | * License as published by the Free Software Foundation; either |
8 | * version 2 of the License, or (at your option) any later version. |
9 | * |
10 | * This library is distributed in the hope that it will be useful, |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 | * Lesser General Public License for more details. |
14 | * |
15 | * You should have received a copy of the GNU Lesser General Public |
16 | * License along with this library. If not, see <http://www.gnu.org/licenses/>. |
17 | */ |
18 | |
19 | #ifndef __GSK_GL_SHADER_H__ |
20 | #define __GSK_GL_SHADER_H__ |
21 | |
22 | #if !defined (__GSK_H_INSIDE__) && !defined (GTK_COMPILATION) |
23 | #error "Only <gsk/gsk.h> can be included directly." |
24 | #endif |
25 | |
26 | #include <stdarg.h> |
27 | |
28 | #include <gsk/gsktypes.h> |
29 | #include <gsk/gskenums.h> |
30 | |
31 | G_BEGIN_DECLS |
32 | |
33 | #define GSK_TYPE_SHADER_ARGS_BUILDER (gsk_shader_args_builder_get_type ()) |
34 | |
35 | /** |
36 | * GskShaderArgsBuilder: |
37 | * |
38 | * An object to build the uniforms data for a `GskGLShader`. |
39 | */ |
40 | typedef struct _GskShaderArgsBuilder GskShaderArgsBuilder; |
41 | |
42 | #define GSK_TYPE_GL_SHADER (gsk_gl_shader_get_type ()) |
43 | |
44 | GDK_AVAILABLE_IN_ALL |
45 | G_DECLARE_FINAL_TYPE (GskGLShader, gsk_gl_shader, GSK, GL_SHADER, GObject) |
46 | |
47 | GDK_AVAILABLE_IN_ALL |
48 | GskGLShader * gsk_gl_shader_new_from_bytes (GBytes *sourcecode); |
49 | GDK_AVAILABLE_IN_ALL |
50 | GskGLShader * gsk_gl_shader_new_from_resource (const char *resource_path); |
51 | GDK_AVAILABLE_IN_ALL |
52 | gboolean gsk_gl_shader_compile (GskGLShader *shader, |
53 | GskRenderer *renderer, |
54 | GError **error); |
55 | GDK_AVAILABLE_IN_ALL |
56 | GBytes * gsk_gl_shader_get_source (GskGLShader *shader); |
57 | GDK_AVAILABLE_IN_ALL |
58 | const char * gsk_gl_shader_get_resource (GskGLShader *shader); |
59 | GDK_AVAILABLE_IN_ALL |
60 | int gsk_gl_shader_get_n_textures (GskGLShader *shader); |
61 | GDK_AVAILABLE_IN_ALL |
62 | int gsk_gl_shader_get_n_uniforms (GskGLShader *shader); |
63 | GDK_AVAILABLE_IN_ALL |
64 | const char * gsk_gl_shader_get_uniform_name (GskGLShader *shader, |
65 | int idx); |
66 | GDK_AVAILABLE_IN_ALL |
67 | int gsk_gl_shader_find_uniform_by_name (GskGLShader *shader, |
68 | const char *name); |
69 | GDK_AVAILABLE_IN_ALL |
70 | GskGLUniformType gsk_gl_shader_get_uniform_type (GskGLShader *shader, |
71 | int idx); |
72 | GDK_AVAILABLE_IN_ALL |
73 | int gsk_gl_shader_get_uniform_offset (GskGLShader *shader, |
74 | int idx); |
75 | GDK_AVAILABLE_IN_ALL |
76 | gsize gsk_gl_shader_get_args_size (GskGLShader *shader); |
77 | |
78 | |
79 | /* Helpers for managing shader args */ |
80 | |
81 | GDK_AVAILABLE_IN_ALL |
82 | GBytes * gsk_gl_shader_format_args_va (GskGLShader *shader, |
83 | va_list uniforms); |
84 | GDK_AVAILABLE_IN_ALL |
85 | GBytes * gsk_gl_shader_format_args (GskGLShader *shader, |
86 | ...) G_GNUC_NULL_TERMINATED; |
87 | |
88 | GDK_AVAILABLE_IN_ALL |
89 | float gsk_gl_shader_get_arg_float (GskGLShader *shader, |
90 | GBytes *args, |
91 | int idx); |
92 | GDK_AVAILABLE_IN_ALL |
93 | gint32 gsk_gl_shader_get_arg_int (GskGLShader *shader, |
94 | GBytes *args, |
95 | int idx); |
96 | GDK_AVAILABLE_IN_ALL |
97 | guint32 gsk_gl_shader_get_arg_uint (GskGLShader *shader, |
98 | GBytes *args, |
99 | int idx); |
100 | GDK_AVAILABLE_IN_ALL |
101 | gboolean gsk_gl_shader_get_arg_bool (GskGLShader *shader, |
102 | GBytes *args, |
103 | int idx); |
104 | GDK_AVAILABLE_IN_ALL |
105 | void gsk_gl_shader_get_arg_vec2 (GskGLShader *shader, |
106 | GBytes *args, |
107 | int idx, |
108 | graphene_vec2_t *out_value); |
109 | GDK_AVAILABLE_IN_ALL |
110 | void gsk_gl_shader_get_arg_vec3 (GskGLShader *shader, |
111 | GBytes *args, |
112 | int idx, |
113 | graphene_vec3_t *out_value); |
114 | GDK_AVAILABLE_IN_ALL |
115 | void gsk_gl_shader_get_arg_vec4 (GskGLShader *shader, |
116 | GBytes *args, |
117 | int idx, |
118 | graphene_vec4_t *out_value); |
119 | |
120 | GDK_AVAILABLE_IN_ALL |
121 | GType gsk_shader_args_builder_get_type (void) G_GNUC_CONST; |
122 | |
123 | GDK_AVAILABLE_IN_ALL |
124 | GskShaderArgsBuilder *gsk_shader_args_builder_new (GskGLShader *shader, |
125 | GBytes *initial_values); |
126 | GDK_AVAILABLE_IN_ALL |
127 | GBytes * gsk_shader_args_builder_to_args (GskShaderArgsBuilder *builder); |
128 | GDK_AVAILABLE_IN_ALL |
129 | GBytes * gsk_shader_args_builder_free_to_args (GskShaderArgsBuilder *builder); |
130 | GDK_AVAILABLE_IN_ALL |
131 | GskShaderArgsBuilder *gsk_shader_args_builder_ref (GskShaderArgsBuilder *builder); |
132 | GDK_AVAILABLE_IN_ALL |
133 | void gsk_shader_args_builder_unref (GskShaderArgsBuilder *builder); |
134 | |
135 | GDK_AVAILABLE_IN_ALL |
136 | void gsk_shader_args_builder_set_float (GskShaderArgsBuilder *builder, |
137 | int idx, |
138 | float value); |
139 | GDK_AVAILABLE_IN_ALL |
140 | void gsk_shader_args_builder_set_int (GskShaderArgsBuilder *builder, |
141 | int idx, |
142 | gint32 value); |
143 | GDK_AVAILABLE_IN_ALL |
144 | void gsk_shader_args_builder_set_uint (GskShaderArgsBuilder *builder, |
145 | int idx, |
146 | guint32 value); |
147 | GDK_AVAILABLE_IN_ALL |
148 | void gsk_shader_args_builder_set_bool (GskShaderArgsBuilder *builder, |
149 | int idx, |
150 | gboolean value); |
151 | GDK_AVAILABLE_IN_ALL |
152 | void gsk_shader_args_builder_set_vec2 (GskShaderArgsBuilder *builder, |
153 | int idx, |
154 | const graphene_vec2_t *value); |
155 | GDK_AVAILABLE_IN_ALL |
156 | void gsk_shader_args_builder_set_vec3 (GskShaderArgsBuilder *builder, |
157 | int idx, |
158 | const graphene_vec3_t *value); |
159 | GDK_AVAILABLE_IN_ALL |
160 | void gsk_shader_args_builder_set_vec4 (GskShaderArgsBuilder *builder, |
161 | int idx, |
162 | const graphene_vec4_t *value); |
163 | |
164 | |
165 | G_END_DECLS |
166 | |
167 | #endif /* __GSK_GL_SHADER_H__ */ |
168 | |