devela/ui/back/miniquad/namespace.rs
1// devela::ui::back::miniquad::namespace
2//
3//! Defines the [`miniquad!`] macro.
4//
5
6#[cfg(doc)]
7use ::miniquad::{
8 Bindings, BufferId, BufferSource, BufferType, BufferUsage, RenderingBackend, ShaderId,
9 ShaderMeta,
10};
11
12/// A macro for namespaced [`miniquad`][::miniquad] operations.
13///
14/// # Arms
15/// - [`new_buffer`] wrappers:
16/// - new_vertices([`$ctx`], [`$usage`], `&[vertices]`) -> [`BufferId`];
17/// - new_indices([`$ctx`], [`$usage`], `&[indices]`) -> [`BufferId`];
18/// - new_vertices_indices([`$ctx`], [`$usage`], `&[vertices]`, `&[indices]`)
19/// -> ([`BufferId`], [`BufferId`]);
20/// - [`new_shader`] wrappers:
21/// - new_shader([`$ctx`], `&str`, `&str`, `&str`, [`$meta`]) -> [`ShaderId`];
22/// - new_shader_glsl([`$ctx`], `&str`, `&str`, [`$meta`]) -> [`ShaderId`];
23/// - new_shader_msl([`$ctx`], `&str`, [`$meta`]) -> [`ShaderId`];
24/// - [`Bindings`] wrappers:
25/// - bindings(`Vec<`[`BufferId`]`>`, [`BufferId`], `Vec<`[`ShaderId`]`>`) -> [`Bindings`];
26///
27/// [`new_buffer`]: ::miniquad::RenderingBackend::new_buffer
28/// [`$ctx`]: ::miniquad::RenderingBackend
29/// [`$usage`]: ::miniquad::BufferUsage
30/// [`new_shader`]: ::miniquad::RenderingBackend::new_shader
31/// [`$meta`]: ::miniquad::ShaderMeta
32#[doc(hidden)]
33#[macro_export]
34macro_rules! _miniquad {
35 (
36 /* buffers */
37
38 // Creates a vertex buffer resource object.
39 new_vertices($ctx:expr, $(BufferUsage::)?$usage:ident, $vertices:expr)) => { $crate::paste! {
40 // https://docs.rs/miniquad/latest/miniquad/graphics/enum.BufferType.html
41 // https://docs.rs/miniquad/latest/miniquad/graphics/enum.BufferUsage.html
42 // https://docs.rs/miniquad/latest/miniquad/graphics/enum.BufferSource.html
43 // https://docs.rs/miniquad/latest/miniquad/graphics/struct.BufferId.html
44 $ctx.new_buffer(
45 ::miniquad::BufferType::VertexBuffer,
46 ::miniquad::BufferUsage:: [<$usage:camel>],
47 ::miniquad::BufferSource::slice($vertices),
48 )
49 }};
50 (
51 // Creates an index buffer resource object.
52 new_indices($ctx:expr, $usage:ident, $indices:expr)) => { $crate::paste! {
53 $ctx.new_buffer(
54 ::miniquad::BufferType::IndexBuffer,
55 ::miniquad::BufferUsage:: [<$usage:camel>],
56 ::miniquad::BufferSource::slice($indices),
57 )
58 }};
59 (
60 // Creates both a vertex and index buffer resource objects.
61 new_vertices_indices($ctx:expr, $usage:ident, $vertices:expr, $indices:expr)) => {
62 (
63 $crate::miniquad![new_vertices($ctx, $usage, $vertices)],
64 $crate::miniquad![new_indices($ctx, $usage, $indices)],
65 )
66 };
67 (
68 /* shaders */
69
70 // Creates a OpenGL shader buffer resource object.
71 new_shader_glsl($ctx:expr, $vertex:expr, $fragment:expr, $meta:expr)) => {
72 // https://docs.rs/miniquad/latest/miniquad/graphics/trait.RenderingBackend.html#tymethod.new_shader
73 // https://docs.rs/miniquad/latest/miniquad/graphics/enum.ShaderSource.html
74 // https://docs.rs/miniquad/latest/miniquad/graphics/struct.ShaderMeta.html
75 // https://docs.rs/miniquad/latest/miniquad/graphics/struct.ShaderId.html
76 // https://docs.rs/miniquad/latest/miniquad/graphics/enum.ShaderError.html
77 // https://docs.rs/miniquad/latest/miniquad/graphics/enum.ShaderType.html
78 $ctx.new_shader(
79 ::miniquad::ShaderSource::Glsl { vertex: $vertex, fragment: $fragment },
80 $meta
81 )
82 };
83 (
84 // Creates a Metal shader buffer resource object.
85 new_shader_msl($ctx:expr, $msl:expr, $meta:expr)) => {
86 $ctx.new_shader(::miniquad::ShaderSource::Msl { program: $msl }, $meta)
87 };
88 (
89 // Creates a Glsl or Metal shader buffer resource object, depending on the backend.
90 new_shader($ctx:expr, $vertex:expr, $fragment:expr, $msl:expr, $meta:expr)) => {
91 match $ctx.info().backend {
92 ::miniquad::Backend::OpenGl =>
93 $crate::miniquad![new_shader_glsl($ctx, $vertex, $fragment, $meta)],
94 ::miniquad::Backend::Metal =>
95 $crate::miniquad![new_shader_msl($ctx, $msl, $meta)],
96 }
97 };
98 (
99 /* bindings */
100
101 // Constructs Bindings.
102 bindings($vertex_buffers:expr, $index_buffer:expr, $images:expr) ) => {
103 // https://docs.rs/miniquad/latest/miniquad/graphics/struct.Bindings.html
104 ::miniquad::Bindings {
105 vertex_buffers: $vertex_buffers, index_buffer: $index_buffer, images: $images
106 }
107 };
108 /*
109 (
110 // THINK MAYBE too complex
111 /* pipelines */
112
113 // Creates a new pipeline.
114 //
115 // ($ctx: RenderingBackend, $vertex: &str, $fragment: &str, $meta:ShaderMeta)
116 new_pipeline($ctx:expr, $msl:expr, $meta:expr)) => {
117 // https://docs.rs/miniquad/latest/miniquad/graphics/struct.BufferLayout.html
118 // https://docs.rs/miniquad/latest/miniquad/graphics/struct.VertexAttribute.html
119 // https://docs.rs/miniquad/latest/miniquad/graphics/struct.PipelineParams.html
120 };
121 */
122 /*
123 (
124 // RETHINK: Maybe a helper for TextureParams?
125 /* textures */
126
127 new_texture($ctx:expr, $access:expr, $data:expr, $params)) => {
128 // https://docs.rs/miniquad/latest/miniquad/graphics/enum.TextureAccess.html
129 // https://docs.rs/miniquad/latest/miniquad/graphics/enum.TextureSource.html
130 // https://docs.rs/miniquad/latest/miniquad/graphics/struct.TextureParams.html
131 };
132 (
133 new_render_texture($ctx:expr, $w:expr, $h:expr, $fmt:exp, $mag:expr, $min:$inter, …)) => {
134 // https://docs.rs/miniquad/latest/miniquad/graphics/enum.TextureKind.html
135 // https://docs.rs/miniquad/latest/miniquad/graphics/enum.TextureFormat.html
136 // https://docs.rs/miniquad/latest/miniquad/graphics/enum.TextureWrap.html
137 // https://docs.rs/miniquad/latest/miniquad/graphics/enum.FilterMode.html
138 // https://docs.rs/miniquad/latest/miniquad/graphics/enum.MipmapFilterMode.html
139 };
140 */
141}
142#[doc(inline)]
143pub use _miniquad as miniquad;
144
145// https://docs.rs/miniquad/latest/miniquad/graphics/struct.TextureId.html
146
147// new_texture
148// https://docs.rs/miniquad/latest/miniquad/graphics/trait.RenderingBackend.html#tymethod.new_texture
149
150// new_render_texture
151//
152// https://docs.rs/miniquad/latest/miniquad/graphics/trait.RenderingBackend.html#method.new_render_texture
153// self.new_texture(TextureAccess::RenderTarget, TextureSource::Empty, params)
154
155// new_texture_from_data_and_format…
156// new_texture_from_rgba8
157//
158
159// new_shader_glsl($ctx:ident, $vertex:expr, $fragment:expr, $meta:expr)
160// // -> Result<ShaderId, ShaderError>