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}