1 module evael.renderer.vertex;
2 
3 import std.conv : to;
4 
5 import evael.renderer.shader : ShaderAttribute, Yes, No;
6 import evael.renderer.enums : AttributeType;
7 
8 import evael.utils.math;
9 import evael.utils.color;
10 
11 alias Vertex2PositionColor = VertexPositionColor!2;
12 alias Vertex2PositionColorTexture = VertexPositionColorTexture!2;
13 alias Vertex2PositionColorNormal = VertexPositionColorNormal!2;
14 alias Vertex3PositionColor = VertexPositionColor!3;
15 alias Vertex3PositionColorTexture = VertexPositionColorTexture!3;
16 alias Vertex3PositionColorNormal = VertexPositionColorNormal!3;
17 
18 struct VertexPositionColor(int positionCount)
19 {
20     @ShaderAttribute(0, AttributeType.Float, positionCount, No.normalized)
21     public Vector!(float, positionCount) position;
22     
23     @ShaderAttribute(1, AttributeType.UByte, 4, Yes.normalized)
24     public Color color;
25 }
26 
27 struct VertexPositionColorTexture(int positionCount)
28 {
29     @ShaderAttribute(0, AttributeType.Float, positionCount, No.normalized)
30     public Vector!(float, positionCount) position;
31 
32     @ShaderAttribute(1, AttributeType.UByte, 4, Yes.normalized)
33     public Color color;
34 
35     @ShaderAttribute(2, AttributeType.Float, 2, No.normalized)
36     public vec2 textureCoordinate;
37 }
38 
39 struct VertexPositionColorNormal(int positionCount)
40 {
41     @ShaderAttribute(0, AttributeType.Float, positionCount, No.normalized)
42     public Vector!(float, positionCount) position;
43 
44     @ShaderAttribute(1, AttributeType.UByte, 4, Yes.normalized)
45     public Color color;
46 
47     @ShaderAttribute(2, AttributeType.Float, 3, Yes.normalized)
48     public vec3 normal;
49 }
50 
51 struct VertexPositionColorNormalTexture
52 {
53     @ShaderAttribute(0, AttributeType.Float, 3, No.normalized)
54     public vec3 position;
55 
56     @ShaderAttribute(1, AttributeType.UByte, 4, Yes.normalized)
57     public Color color;
58 
59     @ShaderAttribute(2, AttributeType.Float, 3, Yes.normalized)
60     public vec3 normal;
61 
62     @ShaderAttribute(3, AttributeType.Float, 2, No.normalized)
63     public vec2 textureCoordinate;
64 }
65 
66 struct TerrainVertex
67 {
68     @ShaderAttribute(0, AttributeType.Float, 3, No.normalized)
69     public vec3 position;
70 
71     @ShaderAttribute(1, AttributeType.UByte, 4, Yes.normalized)
72     public Color color;
73 
74     @ShaderAttribute(2, AttributeType.Float, 3, Yes.normalized)
75     public vec3 normal;
76 
77     @ShaderAttribute(3, AttributeType.Float, 2, No.normalized)
78     public vec2 textureCoordinate;
79 
80     @ShaderAttribute(4, AttributeType.Float, 3, Yes.normalized)
81     public vec3 tangent;
82     
83     @ShaderAttribute(5, AttributeType.Float, 3, Yes.normalized)
84     public vec3 bitangent;
85 
86     @ShaderAttribute(6, AttributeType.Float, 1, No.normalized)
87     public float textureId;
88 
89     @ShaderAttribute(7, AttributeType.Float, 1, No.normalized)
90     public float blendingTextureId;
91 }
92 
93 struct IqmVertex
94 {
95     @ShaderAttribute(0, AttributeType.Float, 3, No.normalized)
96     public vec3 position;
97 
98     @ShaderAttribute(1, AttributeType.UByte, 4, Yes.normalized)
99     public Color color;
100 
101     @ShaderAttribute(2, AttributeType.Float, 3, Yes.normalized)
102     public vec3 normal;
103 
104     @ShaderAttribute(3, AttributeType.Float, 2, No.normalized)
105     public vec2 textureCoordinate;
106 
107     @ShaderAttribute(4, AttributeType.UByte, 4, No.normalized)
108     public ubvec4 blendIndex;
109 
110     @ShaderAttribute(5, AttributeType.UByte, 4, Yes.normalized)
111     public ubvec4 blendWeight;
112 }
113 
114 struct Instancing(int layoutIndex)
115 {
116     @ShaderAttribute(layoutIndex, AttributeType.Float, 4, No.normalized)
117     public vec4 row1;
118 
119     @ShaderAttribute(layoutIndex + 1, AttributeType.Float, 4, No.normalized)
120     public vec4 row2;
121 
122     @ShaderAttribute(layoutIndex + 2, AttributeType.Float, 4, No.normalized)
123     public vec4 row3;
124 
125     @ShaderAttribute(layoutIndex + 3, AttributeType.Float, 4, No.normalized)
126     public vec4 row4;
127 }