1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// from gst-gir-files (https://gitlab.freedesktop.org/gstreamer/gir-files-rs.git)
4// DO NOT EDIT
5
6use crate::{ffi, GLContext, GLSLStage};
7#[cfg(feature = "v1_16")]
8#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
9use crate::{GLSLProfile, GLSLVersion};
10use glib::{
11 prelude::*,
12 signal::{connect_raw, SignalHandlerId},
13 translate::*,
14};
15use std::boxed::Box as Box_;
16
17glib::wrapper! {
18 #[doc(alias = "GstGLShader")]
19 pub struct GLShader(Object<ffi::GstGLShader, ffi::GstGLShaderClass>) @extends gst::Object;
20
21 match fn {
22 type_ => || ffi::gst_gl_shader_get_type(),
23 }
24}
25
26impl GLShader {
27 #[doc(alias = "gst_gl_shader_new")]
28 pub fn new(context: &impl IsA<GLContext>) -> GLShader {
29 skip_assert_initialized!();
30 unsafe { from_glib_full(ffi::gst_gl_shader_new(context.as_ref().to_glib_none().0)) }
31 }
32
33 #[doc(alias = "gst_gl_shader_new_default")]
34 pub fn new_default(context: &impl IsA<GLContext>) -> Result<GLShader, glib::Error> {
35 skip_assert_initialized!();
36 unsafe {
37 let mut error = std::ptr::null_mut();
38 let ret = ffi::gst_gl_shader_new_default(context.as_ref().to_glib_none().0, &mut error);
39 if error.is_null() {
40 Ok(from_glib_full(ret))
41 } else {
42 Err(from_glib_full(error))
43 }
44 }
45 }
46
47 //#[doc(alias = "gst_gl_shader_new_link_with_stages")]
48 //pub fn new_link_with_stages(context: &impl IsA<GLContext>, error: &mut glib::Error, : /*Unknown conversion*//*Unimplemented*/Basic: VarArgs) -> GLShader {
49 // unsafe { TODO: call ffi:gst_gl_shader_new_link_with_stages() }
50 //}
51
52 //#[doc(alias = "gst_gl_shader_new_with_stages")]
53 //#[doc(alias = "new_with_stages")]
54 //pub fn with_stages(context: &impl IsA<GLContext>, error: &mut glib::Error, : /*Unknown conversion*//*Unimplemented*/Basic: VarArgs) -> GLShader {
55 // unsafe { TODO: call ffi:gst_gl_shader_new_with_stages() }
56 //}
57
58 #[doc(alias = "gst_gl_shader_attach")]
59 pub fn attach(&self, stage: &GLSLStage) -> Result<(), glib::error::BoolError> {
60 unsafe {
61 glib::result_from_gboolean!(
62 ffi::gst_gl_shader_attach(self.to_glib_none().0, stage.to_glib_none().0),
63 "Failed to attach stage to shader"
64 )
65 }
66 }
67
68 #[doc(alias = "gst_gl_shader_attach_unlocked")]
69 pub fn attach_unlocked(&self, stage: &GLSLStage) -> Result<(), glib::error::BoolError> {
70 unsafe {
71 glib::result_from_gboolean!(
72 ffi::gst_gl_shader_attach_unlocked(self.to_glib_none().0, stage.to_glib_none().0),
73 "Failed to attach stage to shader"
74 )
75 }
76 }
77
78 #[doc(alias = "gst_gl_shader_bind_attribute_location")]
79 pub fn bind_attribute_location(&self, index: u32, name: &str) {
80 unsafe {
81 ffi::gst_gl_shader_bind_attribute_location(
82 self.to_glib_none().0,
83 index,
84 name.to_glib_none().0,
85 );
86 }
87 }
88
89 #[doc(alias = "gst_gl_shader_bind_frag_data_location")]
90 pub fn bind_frag_data_location(&self, index: u32, name: &str) {
91 unsafe {
92 ffi::gst_gl_shader_bind_frag_data_location(
93 self.to_glib_none().0,
94 index,
95 name.to_glib_none().0,
96 );
97 }
98 }
99
100 #[doc(alias = "gst_gl_shader_compile_attach_stage")]
101 pub fn compile_attach_stage(&self, stage: &GLSLStage) -> Result<(), glib::Error> {
102 unsafe {
103 let mut error = std::ptr::null_mut();
104 let is_ok = ffi::gst_gl_shader_compile_attach_stage(
105 self.to_glib_none().0,
106 stage.to_glib_none().0,
107 &mut error,
108 );
109 debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
110 if error.is_null() {
111 Ok(())
112 } else {
113 Err(from_glib_full(error))
114 }
115 }
116 }
117
118 #[doc(alias = "gst_gl_shader_detach")]
119 pub fn detach(&self, stage: &GLSLStage) {
120 unsafe {
121 ffi::gst_gl_shader_detach(self.to_glib_none().0, stage.to_glib_none().0);
122 }
123 }
124
125 #[doc(alias = "gst_gl_shader_detach_unlocked")]
126 pub fn detach_unlocked(&self, stage: &GLSLStage) {
127 unsafe {
128 ffi::gst_gl_shader_detach_unlocked(self.to_glib_none().0, stage.to_glib_none().0);
129 }
130 }
131
132 #[doc(alias = "gst_gl_shader_get_attribute_location")]
133 #[doc(alias = "get_attribute_location")]
134 pub fn attribute_location(&self, name: &str) -> i32 {
135 unsafe {
136 ffi::gst_gl_shader_get_attribute_location(self.to_glib_none().0, name.to_glib_none().0)
137 }
138 }
139
140 #[doc(alias = "gst_gl_shader_get_program_handle")]
141 #[doc(alias = "get_program_handle")]
142 pub fn program_handle(&self) -> i32 {
143 unsafe { ffi::gst_gl_shader_get_program_handle(self.to_glib_none().0) }
144 }
145
146 #[doc(alias = "gst_gl_shader_is_linked")]
147 #[doc(alias = "linked")]
148 pub fn is_linked(&self) -> bool {
149 unsafe { from_glib(ffi::gst_gl_shader_is_linked(self.to_glib_none().0)) }
150 }
151
152 #[doc(alias = "gst_gl_shader_link")]
153 pub fn link(&self) -> Result<(), glib::Error> {
154 unsafe {
155 let mut error = std::ptr::null_mut();
156 let is_ok = ffi::gst_gl_shader_link(self.to_glib_none().0, &mut error);
157 debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
158 if error.is_null() {
159 Ok(())
160 } else {
161 Err(from_glib_full(error))
162 }
163 }
164 }
165
166 #[doc(alias = "gst_gl_shader_release")]
167 pub fn release(&self) {
168 unsafe {
169 ffi::gst_gl_shader_release(self.to_glib_none().0);
170 }
171 }
172
173 #[doc(alias = "gst_gl_shader_release_unlocked")]
174 pub fn release_unlocked(&self) {
175 unsafe {
176 ffi::gst_gl_shader_release_unlocked(self.to_glib_none().0);
177 }
178 }
179
180 #[doc(alias = "gst_gl_shader_set_uniform_1f")]
181 pub fn set_uniform_1f(&self, name: &str, value: f32) {
182 unsafe {
183 ffi::gst_gl_shader_set_uniform_1f(self.to_glib_none().0, name.to_glib_none().0, value);
184 }
185 }
186
187 #[doc(alias = "gst_gl_shader_set_uniform_1fv")]
188 pub fn set_uniform_1fv(&self, name: &str, value: &[f32]) {
189 let count = value.len() as _;
190 unsafe {
191 ffi::gst_gl_shader_set_uniform_1fv(
192 self.to_glib_none().0,
193 name.to_glib_none().0,
194 count,
195 value.to_glib_none().0,
196 );
197 }
198 }
199
200 #[doc(alias = "gst_gl_shader_set_uniform_1i")]
201 pub fn set_uniform_1i(&self, name: &str, value: i32) {
202 unsafe {
203 ffi::gst_gl_shader_set_uniform_1i(self.to_glib_none().0, name.to_glib_none().0, value);
204 }
205 }
206
207 #[doc(alias = "gst_gl_shader_set_uniform_1iv")]
208 pub fn set_uniform_1iv(&self, name: &str, value: &[i32]) {
209 let count = value.len() as _;
210 unsafe {
211 ffi::gst_gl_shader_set_uniform_1iv(
212 self.to_glib_none().0,
213 name.to_glib_none().0,
214 count,
215 value.to_glib_none().0,
216 );
217 }
218 }
219
220 #[doc(alias = "gst_gl_shader_set_uniform_2f")]
221 pub fn set_uniform_2f(&self, name: &str, v0: f32, v1: f32) {
222 unsafe {
223 ffi::gst_gl_shader_set_uniform_2f(self.to_glib_none().0, name.to_glib_none().0, v0, v1);
224 }
225 }
226
227 #[doc(alias = "gst_gl_shader_set_uniform_2fv")]
228 pub fn set_uniform_2fv(&self, name: &str, value: &[f32]) {
229 let count = value.len() as _;
230 unsafe {
231 ffi::gst_gl_shader_set_uniform_2fv(
232 self.to_glib_none().0,
233 name.to_glib_none().0,
234 count,
235 value.to_glib_none().0,
236 );
237 }
238 }
239
240 #[doc(alias = "gst_gl_shader_set_uniform_2i")]
241 pub fn set_uniform_2i(&self, name: &str, v0: i32, v1: i32) {
242 unsafe {
243 ffi::gst_gl_shader_set_uniform_2i(self.to_glib_none().0, name.to_glib_none().0, v0, v1);
244 }
245 }
246
247 #[doc(alias = "gst_gl_shader_set_uniform_2iv")]
248 pub fn set_uniform_2iv(&self, name: &str, value: &[i32]) {
249 let count = value.len() as _;
250 unsafe {
251 ffi::gst_gl_shader_set_uniform_2iv(
252 self.to_glib_none().0,
253 name.to_glib_none().0,
254 count,
255 value.to_glib_none().0,
256 );
257 }
258 }
259
260 #[doc(alias = "gst_gl_shader_set_uniform_3f")]
261 pub fn set_uniform_3f(&self, name: &str, v0: f32, v1: f32, v2: f32) {
262 unsafe {
263 ffi::gst_gl_shader_set_uniform_3f(
264 self.to_glib_none().0,
265 name.to_glib_none().0,
266 v0,
267 v1,
268 v2,
269 );
270 }
271 }
272
273 #[doc(alias = "gst_gl_shader_set_uniform_3fv")]
274 pub fn set_uniform_3fv(&self, name: &str, value: &[f32]) {
275 let count = value.len() as _;
276 unsafe {
277 ffi::gst_gl_shader_set_uniform_3fv(
278 self.to_glib_none().0,
279 name.to_glib_none().0,
280 count,
281 value.to_glib_none().0,
282 );
283 }
284 }
285
286 #[doc(alias = "gst_gl_shader_set_uniform_3i")]
287 pub fn set_uniform_3i(&self, name: &str, v0: i32, v1: i32, v2: i32) {
288 unsafe {
289 ffi::gst_gl_shader_set_uniform_3i(
290 self.to_glib_none().0,
291 name.to_glib_none().0,
292 v0,
293 v1,
294 v2,
295 );
296 }
297 }
298
299 #[doc(alias = "gst_gl_shader_set_uniform_3iv")]
300 pub fn set_uniform_3iv(&self, name: &str, value: &[i32]) {
301 let count = value.len() as _;
302 unsafe {
303 ffi::gst_gl_shader_set_uniform_3iv(
304 self.to_glib_none().0,
305 name.to_glib_none().0,
306 count,
307 value.to_glib_none().0,
308 );
309 }
310 }
311
312 #[doc(alias = "gst_gl_shader_set_uniform_4f")]
313 pub fn set_uniform_4f(&self, name: &str, v0: f32, v1: f32, v2: f32, v3: f32) {
314 unsafe {
315 ffi::gst_gl_shader_set_uniform_4f(
316 self.to_glib_none().0,
317 name.to_glib_none().0,
318 v0,
319 v1,
320 v2,
321 v3,
322 );
323 }
324 }
325
326 #[doc(alias = "gst_gl_shader_set_uniform_4fv")]
327 pub fn set_uniform_4fv(&self, name: &str, value: &[f32]) {
328 let count = value.len() as _;
329 unsafe {
330 ffi::gst_gl_shader_set_uniform_4fv(
331 self.to_glib_none().0,
332 name.to_glib_none().0,
333 count,
334 value.to_glib_none().0,
335 );
336 }
337 }
338
339 #[doc(alias = "gst_gl_shader_set_uniform_4i")]
340 pub fn set_uniform_4i(&self, name: &str, v0: i32, v1: i32, v2: i32, v3: i32) {
341 unsafe {
342 ffi::gst_gl_shader_set_uniform_4i(
343 self.to_glib_none().0,
344 name.to_glib_none().0,
345 v0,
346 v1,
347 v2,
348 v3,
349 );
350 }
351 }
352
353 #[doc(alias = "gst_gl_shader_set_uniform_4iv")]
354 pub fn set_uniform_4iv(&self, name: &str, value: &[i32]) {
355 let count = value.len() as _;
356 unsafe {
357 ffi::gst_gl_shader_set_uniform_4iv(
358 self.to_glib_none().0,
359 name.to_glib_none().0,
360 count,
361 value.to_glib_none().0,
362 );
363 }
364 }
365
366 #[doc(alias = "gst_gl_shader_use")]
367 #[doc(alias = "use")]
368 pub fn use_(&self) {
369 unsafe {
370 ffi::gst_gl_shader_use(self.to_glib_none().0);
371 }
372 }
373
374 #[cfg(feature = "v1_16")]
375 #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
376 #[doc(alias = "gst_gl_shader_string_fragment_external_oes_get_default")]
377 pub fn string_fragment_external_oes_get_default(
378 context: &impl IsA<GLContext>,
379 version: GLSLVersion,
380 profile: GLSLProfile,
381 ) -> glib::GString {
382 skip_assert_initialized!();
383 unsafe {
384 from_glib_full(ffi::gst_gl_shader_string_fragment_external_oes_get_default(
385 context.as_ref().to_glib_none().0,
386 version.into_glib(),
387 profile.into_glib(),
388 ))
389 }
390 }
391
392 #[cfg(feature = "v1_16")]
393 #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
394 #[doc(alias = "gst_gl_shader_string_fragment_get_default")]
395 pub fn string_fragment_get_default(
396 context: &impl IsA<GLContext>,
397 version: GLSLVersion,
398 profile: GLSLProfile,
399 ) -> glib::GString {
400 skip_assert_initialized!();
401 unsafe {
402 from_glib_full(ffi::gst_gl_shader_string_fragment_get_default(
403 context.as_ref().to_glib_none().0,
404 version.into_glib(),
405 profile.into_glib(),
406 ))
407 }
408 }
409
410 #[cfg(feature = "v1_16")]
411 #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
412 #[doc(alias = "gst_gl_shader_string_get_highest_precision")]
413 pub fn string_get_highest_precision(
414 context: &impl IsA<GLContext>,
415 version: GLSLVersion,
416 profile: GLSLProfile,
417 ) -> glib::GString {
418 skip_assert_initialized!();
419 unsafe {
420 from_glib_none(ffi::gst_gl_shader_string_get_highest_precision(
421 context.as_ref().to_glib_none().0,
422 version.into_glib(),
423 profile.into_glib(),
424 ))
425 }
426 }
427
428 #[doc(alias = "linked")]
429 pub fn connect_linked_notify<F: Fn(&Self) + Send + Sync + 'static>(
430 &self,
431 f: F,
432 ) -> SignalHandlerId {
433 unsafe extern "C" fn notify_linked_trampoline<F: Fn(&GLShader) + Send + Sync + 'static>(
434 this: *mut ffi::GstGLShader,
435 _param_spec: glib::ffi::gpointer,
436 f: glib::ffi::gpointer,
437 ) {
438 let f: &F = &*(f as *const F);
439 f(&from_glib_borrow(this))
440 }
441 unsafe {
442 let f: Box_<F> = Box_::new(f);
443 connect_raw(
444 self.as_ptr() as *mut _,
445 b"notify::linked\0".as_ptr() as *const _,
446 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
447 notify_linked_trampoline::<F> as *const (),
448 )),
449 Box_::into_raw(f),
450 )
451 }
452 }
453}
454
455unsafe impl Send for GLShader {}
456unsafe impl Sync for GLShader {}
457