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 }