1use super::Params;
2
3const UNIFORMARRAY_SIZE: usize = 14;
4
5pub struct UniformArray([f32; UNIFORMARRAY_SIZE * 4]);
6
7impl Default for UniformArray {
8 fn default() -> Self {
9 Self([
10 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
11 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
12 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
13 ])
14 }
15}
16
17impl UniformArray {
18 pub fn as_slice(&self) -> &[f32] {
19 &self.0
20 }
21
22 pub fn set_scissor_mat(&mut self, mat: [f32; 12]) {
23 self.0[0..12].copy_from_slice(&mat);
24 }
25
26 pub fn set_paint_mat(&mut self, mat: [f32; 12]) {
27 self.0[12..24].copy_from_slice(&mat);
28 }
29
30 pub fn set_inner_col(&mut self, col: [f32; 4]) {
31 self.0[24..28].copy_from_slice(&col);
32 }
33
34 pub fn set_outer_col(&mut self, col: [f32; 4]) {
35 self.0[28..32].copy_from_slice(&col);
36 }
37
38 pub fn set_scissor_ext(&mut self, ext: [f32; 2]) {
39 self.0[32..34].copy_from_slice(&ext);
40 }
41
42 pub fn set_scissor_scale(&mut self, scale: [f32; 2]) {
43 self.0[34..36].copy_from_slice(&scale);
44 }
45
46 pub fn set_extent(&mut self, ext: [f32; 2]) {
47 self.0[36..38].copy_from_slice(&ext);
48 }
49
50 pub fn set_radius(&mut self, radius: f32) {
51 self.0[38] = radius;
52 }
53
54 pub fn set_feather(&mut self, feather: f32) {
55 self.0[39] = feather;
56 }
57
58 pub fn set_stroke_mult(&mut self, stroke_mult: f32) {
59 self.0[40] = stroke_mult;
60 }
61
62 pub fn set_stroke_thr(&mut self, stroke_thr: f32) {
63 self.0[41] = stroke_thr;
64 }
65
66 pub fn set_tex_type(&mut self, tex_type: f32) {
67 self.0[42] = tex_type;
68 }
69
70 pub fn set_shader_type(&mut self, shader_type: f32) {
71 self.0[43] = shader_type;
72 }
73
74 pub fn set_glyph_texture_type(&mut self, glyph_texture_type: f32) {
75 self.0[44] = glyph_texture_type;
76 }
77
78 pub fn set_image_blur_filter_direction(&mut self, direction: [f32; 2]) {
79 self.0[45..47].copy_from_slice(&direction);
80 }
81
82 pub fn set_image_blur_filter_sigma(&mut self, sigma: f32) {
83 self.0[47] = sigma;
84 }
85
86 pub fn set_image_blur_filter_coeff(&mut self, coeff: [f32; 3]) {
87 self.0[48..51].copy_from_slice(&coeff);
88 }
89}
90
91impl From<&Params> for UniformArray {
92 fn from(params: &Params) -> Self {
93 let mut arr = Self::default();
94
95 arr.set_scissor_mat(params.scissor_mat);
96 arr.set_paint_mat(params.paint_mat);
97 arr.set_inner_col(params.inner_col);
98 arr.set_outer_col(params.outer_col);
99 arr.set_scissor_ext(params.scissor_ext);
100 arr.set_scissor_scale(params.scissor_scale);
101 arr.set_extent(params.extent);
102 arr.set_radius(params.radius);
103 arr.set_feather(params.feather);
104 arr.set_stroke_mult(params.stroke_mult);
105 arr.set_stroke_thr(params.stroke_thr);
106 arr.set_shader_type(params.shader_type.to_f32());
107 arr.set_tex_type(params.tex_type);
108 arr.set_glyph_texture_type(params.glyph_texture_type as f32);
109 arr.set_image_blur_filter_direction(params.image_blur_filter_direction);
110 arr.set_image_blur_filter_sigma(params.image_blur_filter_sigma);
111 arr.set_image_blur_filter_coeff(params.image_blur_filter_coeff);
112
113 arr
114 }
115}
116