gsk4/auto/
gl_shader_node.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, GLShader, RenderNode};
7use glib::{prelude::*, translate::*};
8
9glib::wrapper! {
10    /// A render node using a GL shader when drawing its children nodes.
11    #[doc(alias = "GskGLShaderNode")]
12    pub struct GLShaderNode(Shared<ffi::GskGLShaderNode>);
13
14    match fn {
15        ref => |ptr| ffi::gsk_render_node_ref(ptr as *mut ffi::GskRenderNode),
16        unref => |ptr| ffi::gsk_render_node_unref(ptr as *mut ffi::GskRenderNode),
17    }
18}
19
20impl StaticType for GLShaderNode {
21    fn static_type() -> glib::Type {
22        unsafe { from_glib(ffi::gsk_gl_shader_node_get_type()) }
23    }
24}
25
26impl GLShaderNode {
27    /// Creates a [`RenderNode`][crate::RenderNode] that will render the given @shader into the
28    /// area given by @bounds.
29    ///
30    /// The @args is a block of data to use for uniform input, as per types and
31    /// offsets defined by the @shader. Normally this is generated by
32    /// `Gsk::GLShader::format_args()` or [`ShaderArgsBuilder`][crate::ShaderArgsBuilder].
33    ///
34    /// See [`GLShader`][crate::GLShader] for details about how the shader should be written.
35    ///
36    /// All the children will be rendered into textures (if they aren't already
37    /// `GskTextureNodes`, which will be used directly). These textures will be
38    /// sent as input to the shader.
39    ///
40    /// If the renderer doesn't support GL shaders, or if there is any problem
41    /// when compiling the shader, then the node will draw pink. You should use
42    /// [`GLShader::compile()`][crate::GLShader::compile()] to ensure the @shader will work for the
43    /// renderer before using it.
44    ///
45    /// # Deprecated since 4.16
46    ///
47    /// GTK's new Vulkan-focused rendering
48    ///   does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
49    ///   for OpenGL rendering.
50    /// ## `shader`
51    /// the [`GLShader`][crate::GLShader]
52    /// ## `bounds`
53    /// the rectangle to render the shader into
54    /// ## `args`
55    /// Arguments for the uniforms
56    /// ## `children`
57    /// array of child nodes,
58    ///   these will be rendered to textures and used as input.
59    ///
60    /// # Returns
61    ///
62    /// A new [`RenderNode`][crate::RenderNode]
63    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
64    #[allow(deprecated)]
65    #[doc(alias = "gsk_gl_shader_node_new")]
66    pub fn new(
67        shader: &GLShader,
68        bounds: &graphene::Rect,
69        args: &glib::Bytes,
70        children: &[RenderNode],
71    ) -> GLShaderNode {
72        skip_assert_initialized!();
73        let n_children = children.len() as _;
74        unsafe {
75            from_glib_full(ffi::gsk_gl_shader_node_new(
76                shader.to_glib_none().0,
77                bounds.to_glib_none().0,
78                args.to_glib_none().0,
79                children.to_glib_none().0,
80                n_children,
81            ))
82        }
83    }
84
85    /// Gets args for the node.
86    ///
87    /// # Deprecated since 4.16
88    ///
89    /// GTK's new Vulkan-focused rendering
90    ///   does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
91    ///   for OpenGL rendering.
92    ///
93    /// # Returns
94    ///
95    /// A `GBytes` with the uniform arguments
96    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
97    #[allow(deprecated)]
98    #[doc(alias = "gsk_gl_shader_node_get_args")]
99    #[doc(alias = "get_args")]
100    pub fn args(&self) -> glib::Bytes {
101        unsafe { from_glib_none(ffi::gsk_gl_shader_node_get_args(self.to_glib_none().0)) }
102    }
103
104    /// Returns the number of children
105    ///
106    /// # Deprecated since 4.16
107    ///
108    /// GTK's new Vulkan-focused rendering
109    ///   does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
110    ///   for OpenGL rendering.
111    ///
112    /// # Returns
113    ///
114    /// The number of children
115    #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
116    #[allow(deprecated)]
117    #[doc(alias = "gsk_gl_shader_node_get_n_children")]
118    #[doc(alias = "get_n_children")]
119    pub fn n_children(&self) -> u32 {
120        unsafe { ffi::gsk_gl_shader_node_get_n_children(self.to_glib_none().0) }
121    }
122
123    /// Gets shader code for the node.
124    ///
125    /// # Returns
126    ///
127    /// the [`GLShader`][crate::GLShader] shader
128    #[doc(alias = "gsk_gl_shader_node_get_shader")]
129    #[doc(alias = "get_shader")]
130    pub fn shader(&self) -> GLShader {
131        unsafe { from_glib_none(ffi::gsk_gl_shader_node_get_shader(self.to_glib_none().0)) }
132    }
133}