1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
pub(crate) mod textured_quad;
// #[repr(C)]
// pub struct Vertex {
//     // pub position: Vec2,
// }

// #[repr(C)]
// #[derive(Debug)]
// pub struct Uniforms {
//     pub projection: Mat4,
//     pub model: Mat4,
//     pub source: Vec4,
//     pub color: Vec4,
//     pub z_index: f32,
// }
// impl Default for Uniforms {
//     fn default() -> Uniforms {
//         Uniforms {
//             projection: Mat4::orthographic_lh(0.0, 1.0, 0.0, 1.0, -100.0, 100.0),
//             model: Mat4::IDENTITY,
//             source: Vec4::new(0.0, 0.0, 1.0, 1.0),
//             color: Vec4::new(1.0, 1.0, 1.0, 1.0),
//             z_index: 0.0,
//         }
//     }
// }

// pub const VERTEX: &str = r#"
// #version 100

// attribute vec2 position;

// varying lowp vec4 color;
// varying lowp vec2 uv;

// uniform mat4 Projection;
// uniform vec4 Source;
// uniform vec4 Color;
// uniform mat4 Model;

// uniform float z_index;

// void main() {
//     gl_Position = Projection * Model * vec4(position, 0, 1);
//     gl_Position.z = z_index;
//     color = Color;
//     uv = position * Source.zw + Source.xy;
// }"#;

// pub const FRAGMENT: &str = r#"
// #version 100

// varying lowp vec4 color;
// varying lowp vec2 uv;

// uniform sampler2D tex;

// void main() {
//     gl_FragColor = texture2D(tex, uv) * color;
// }"#;

// pub fn meta() -> ShaderMeta {
//     ShaderMeta {
//         images: vec![String::from("tex")],
//         uniforms: UniformBlockLayout {
//             uniforms: vec![
//                 UniformDesc::new("Projection", UniformType::Mat4),
//                 UniformDesc::new("Model", UniformType::Mat4),
//                 UniformDesc::new("Source", UniformType::Float4),
//                 UniformDesc::new("Color", UniformType::Float4),
//                 UniformDesc::new("z_index", UniformType::Float1),
//             ],
//         },
//     }
// }

// // Credit(https://github.com/not-fl3/good-web-game/blob/master/src/graphics/image.rs#L129)
// pub(crate) fn param_to_instance_transform(
//     rotation: f32,
//     scale: Vec2,
//     offset: Vec2,
//     dest: Vec2,
// ) -> Mat4 {
//     let cosr = rotation.cos();
//     let sinr = rotation.sin();
//     let m00 = cosr * scale.x;
//     let m01 = -sinr * scale.y;
//     let m10 = sinr * scale.x;
//     let m11 = cosr * scale.y;
//     let m03 = offset.x * (1.0 - m00) - offset.y * m01 + dest.x;
//     let m13 = offset.y * (1.0 - m11) - offset.x * m10 + dest.y;

//     Mat4::from_cols(
//         Vec4::new(m00, m10, 0.0, 0.0),
//         Vec4::new(m01, m11, 0.0, 0.0),
//         Vec4::new(0.0, 0.0, 1.0, 0.0),
//         Vec4::new(m03, m13, 0.0, 1.0),
//     )
// }