gsk4/auto/
gl_shader.rs

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// DO NOT EDIT
4#![allow(deprecated)]
5
6use crate::{ffi, GLUniformType, Renderer};
7use glib::{prelude::*, translate::*};
8
9glib::wrapper! {
10    #[doc(alias = "GskGLShader")]
11    pub struct GLShader(Object<ffi::GskGLShader, ffi::GskGLShaderClass>);
12
13    match fn {
14        type_ => || ffi::gsk_gl_shader_get_type(),
15    }
16}
17
18impl GLShader {
19    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
20    #[allow(deprecated)]
21    #[doc(alias = "gsk_gl_shader_new_from_bytes")]
22    #[doc(alias = "new_from_bytes")]
23    pub fn from_bytes(sourcecode: &glib::Bytes) -> GLShader {
24        assert_initialized_main_thread!();
25        unsafe {
26            from_glib_full(ffi::gsk_gl_shader_new_from_bytes(
27                sourcecode.to_glib_none().0,
28            ))
29        }
30    }
31
32    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
33    #[allow(deprecated)]
34    #[doc(alias = "gsk_gl_shader_new_from_resource")]
35    #[doc(alias = "new_from_resource")]
36    pub fn from_resource(resource_path: &str) -> GLShader {
37        assert_initialized_main_thread!();
38        unsafe {
39            from_glib_full(ffi::gsk_gl_shader_new_from_resource(
40                resource_path.to_glib_none().0,
41            ))
42        }
43    }
44
45    // rustdoc-stripper-ignore-next
46    /// Creates a new builder-pattern struct instance to construct [`GLShader`] objects.
47    ///
48    /// This method returns an instance of [`GLShaderBuilder`](crate::builders::GLShaderBuilder) which can be used to create [`GLShader`] objects.
49    pub fn builder() -> GLShaderBuilder {
50        GLShaderBuilder::new()
51    }
52
53    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
54    #[allow(deprecated)]
55    #[doc(alias = "gsk_gl_shader_compile")]
56    pub fn compile(&self, renderer: &impl IsA<Renderer>) -> Result<(), glib::Error> {
57        unsafe {
58            let mut error = std::ptr::null_mut();
59            let is_ok = ffi::gsk_gl_shader_compile(
60                self.to_glib_none().0,
61                renderer.as_ref().to_glib_none().0,
62                &mut error,
63            );
64            debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
65            if error.is_null() {
66                Ok(())
67            } else {
68                Err(from_glib_full(error))
69            }
70        }
71    }
72
73    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
74    #[allow(deprecated)]
75    #[doc(alias = "gsk_gl_shader_find_uniform_by_name")]
76    pub fn find_uniform_by_name(&self, name: &str) -> i32 {
77        unsafe {
78            ffi::gsk_gl_shader_find_uniform_by_name(self.to_glib_none().0, name.to_glib_none().0)
79        }
80    }
81
82    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
83    #[allow(deprecated)]
84    #[doc(alias = "gsk_gl_shader_get_arg_bool")]
85    #[doc(alias = "get_arg_bool")]
86    pub fn arg_bool(&self, args: &glib::Bytes, idx: i32) -> bool {
87        unsafe {
88            from_glib(ffi::gsk_gl_shader_get_arg_bool(
89                self.to_glib_none().0,
90                args.to_glib_none().0,
91                idx,
92            ))
93        }
94    }
95
96    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
97    #[allow(deprecated)]
98    #[doc(alias = "gsk_gl_shader_get_arg_float")]
99    #[doc(alias = "get_arg_float")]
100    pub fn arg_float(&self, args: &glib::Bytes, idx: i32) -> f32 {
101        unsafe {
102            ffi::gsk_gl_shader_get_arg_float(self.to_glib_none().0, args.to_glib_none().0, idx)
103        }
104    }
105
106    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
107    #[allow(deprecated)]
108    #[doc(alias = "gsk_gl_shader_get_arg_int")]
109    #[doc(alias = "get_arg_int")]
110    pub fn arg_int(&self, args: &glib::Bytes, idx: i32) -> i32 {
111        unsafe { ffi::gsk_gl_shader_get_arg_int(self.to_glib_none().0, args.to_glib_none().0, idx) }
112    }
113
114    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
115    #[allow(deprecated)]
116    #[doc(alias = "gsk_gl_shader_get_arg_uint")]
117    #[doc(alias = "get_arg_uint")]
118    pub fn arg_uint(&self, args: &glib::Bytes, idx: i32) -> u32 {
119        unsafe {
120            ffi::gsk_gl_shader_get_arg_uint(self.to_glib_none().0, args.to_glib_none().0, idx)
121        }
122    }
123
124    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
125    #[allow(deprecated)]
126    #[doc(alias = "gsk_gl_shader_get_args_size")]
127    #[doc(alias = "get_args_size")]
128    pub fn args_size(&self) -> usize {
129        unsafe { ffi::gsk_gl_shader_get_args_size(self.to_glib_none().0) }
130    }
131
132    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
133    #[allow(deprecated)]
134    #[doc(alias = "gsk_gl_shader_get_n_textures")]
135    #[doc(alias = "get_n_textures")]
136    pub fn n_textures(&self) -> i32 {
137        unsafe { ffi::gsk_gl_shader_get_n_textures(self.to_glib_none().0) }
138    }
139
140    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
141    #[allow(deprecated)]
142    #[doc(alias = "gsk_gl_shader_get_n_uniforms")]
143    #[doc(alias = "get_n_uniforms")]
144    pub fn n_uniforms(&self) -> i32 {
145        unsafe { ffi::gsk_gl_shader_get_n_uniforms(self.to_glib_none().0) }
146    }
147
148    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
149    #[allow(deprecated)]
150    #[doc(alias = "gsk_gl_shader_get_resource")]
151    #[doc(alias = "get_resource")]
152    pub fn resource(&self) -> Option<glib::GString> {
153        unsafe { from_glib_none(ffi::gsk_gl_shader_get_resource(self.to_glib_none().0)) }
154    }
155
156    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
157    #[allow(deprecated)]
158    #[doc(alias = "gsk_gl_shader_get_source")]
159    #[doc(alias = "get_source")]
160    pub fn source(&self) -> glib::Bytes {
161        unsafe { from_glib_none(ffi::gsk_gl_shader_get_source(self.to_glib_none().0)) }
162    }
163
164    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
165    #[allow(deprecated)]
166    #[doc(alias = "gsk_gl_shader_get_uniform_name")]
167    #[doc(alias = "get_uniform_name")]
168    pub fn uniform_name(&self, idx: i32) -> glib::GString {
169        unsafe {
170            from_glib_none(ffi::gsk_gl_shader_get_uniform_name(
171                self.to_glib_none().0,
172                idx,
173            ))
174        }
175    }
176
177    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
178    #[allow(deprecated)]
179    #[doc(alias = "gsk_gl_shader_get_uniform_offset")]
180    #[doc(alias = "get_uniform_offset")]
181    pub fn uniform_offset(&self, idx: i32) -> i32 {
182        unsafe { ffi::gsk_gl_shader_get_uniform_offset(self.to_glib_none().0, idx) }
183    }
184
185    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
186    #[allow(deprecated)]
187    #[doc(alias = "gsk_gl_shader_get_uniform_type")]
188    #[doc(alias = "get_uniform_type")]
189    pub fn uniform_type(&self, idx: i32) -> GLUniformType {
190        unsafe {
191            from_glib(ffi::gsk_gl_shader_get_uniform_type(
192                self.to_glib_none().0,
193                idx,
194            ))
195        }
196    }
197}
198
199// rustdoc-stripper-ignore-next
200/// A [builder-pattern] type to construct [`GLShader`] objects.
201///
202/// [builder-pattern]: https://doc.rust-lang.org/1.0.0/style/ownership/builders.html
203#[must_use = "The builder must be built to be used"]
204pub struct GLShaderBuilder {
205    builder: glib::object::ObjectBuilder<'static, GLShader>,
206}
207
208impl GLShaderBuilder {
209    fn new() -> Self {
210        Self {
211            builder: glib::object::Object::builder(),
212        }
213    }
214
215    pub fn resource(self, resource: impl Into<glib::GString>) -> Self {
216        Self {
217            builder: self.builder.property("resource", resource.into()),
218        }
219    }
220
221    pub fn source(self, source: &glib::Bytes) -> Self {
222        Self {
223            builder: self.builder.property("source", source.clone()),
224        }
225    }
226
227    // rustdoc-stripper-ignore-next
228    /// Build the [`GLShader`].
229    #[must_use = "Building the object from the builder is usually expensive and is not expected to have side effects"]
230    pub fn build(self) -> GLShader {
231        assert_initialized_main_thread!();
232        self.builder.build()
233    }
234}