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 | |
6 | use crate::{ffi, GLContext, GLSLStage}; |
7 | #[cfg (feature = "v1_16" )] |
8 | #[cfg_attr (docsrs, doc(cfg(feature = "v1_16" )))] |
9 | use crate::{GLSLProfile, GLSLVersion}; |
10 | use glib::{ |
11 | prelude::*, |
12 | signal::{connect_raw, SignalHandlerId}, |
13 | translate::*, |
14 | }; |
15 | use std::boxed::Box as Box_; |
16 | |
17 | glib::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 | |
26 | impl 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 | |
455 | unsafe impl Send for GLShader {} |
456 | unsafe impl Sync for GLShader {} |
457 | |