All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
AllVertexTypes.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "Types.h"
6 #include "VectorMath.h"
7 #include "MathFunc.h"
8 
9 #include <climits>
10 #include <cmath>
11 
12 namespace Eegeo
13 {
14  namespace Rendering
15  {
16  namespace VertexTypes
17  {
18  struct TextVertex
19  {
20  float x,y,z,altitude;
21  float u,v,shadow;
22  };
23 
24  inline TextVertex CreateTextVertex(float x, float y, float z, float altitude, float u, float v, float shadow)
25  {
26  TextVertex vtx;
27  vtx.x = x;
28  vtx.y = y;
29  vtx.z = z;
30  vtx.altitude = altitude;
31  vtx.u = u;
32  vtx.v = v;
33  vtx.shadow = shadow;
34  return vtx;
35  }
36 
38  {
39  float x,y;
40  u16 u,v;
41  u8 altColor, pad0, pad1, pad2;
42 
44  {}
45 
46  ScreenTextVertex(float x, float y, u16 u, u16 v, u8 altColor)
47  : x(x), y(y), u(u), v(v), altColor(altColor), pad0(0), pad1(0), pad2(255)
48  {}
49  };
50 
52  {
53  float x, y, z;
54  u16 u,v;
55  u8 altColor, pad0, pad1, pad2;
56  };
57 
59  {
60  u16 x,y,z,lightDots;
61  u16 u,v;
62  };
63 
65  {
66  u16 x,y,z,lightDots;
67  u16 u,v;
68  Byte r, g, b, a;
69  };
70 
72  {
73  u16 x,y,z,pad1;
74  s8 nx,ny,nz,pad2;
75  u16 u,v;
76  Byte r, g, b, a;
77  };
78 
80  {
81  u16 x,y,z,pad1;
82  s8 nx,ny,nz,pad2;
83  u16 u,v;
84  };
85 
87  {
88  u16 x,y,z,lightDots;
89  u16 u,v;
90  u16 u2,v2;
91  };
92 
94  {
95  u16 x,y,z,h;
96  };
97 
99  {
100  u16 x,y,z;
101  };
102 
104  {
105  float x,y,z,lightDots;
106  float u,v;
107  };
108 
109 
111  {
112  float x,y,z;
113  };
114 
116  {
117  float x,y,z;
118  float u,v;
119  };
120 
122  {
123  float x,y,z;
124  float r,g,b,a;
125  };
126 
128  {
129  float x,y,z;
130  float u,v;
131  float r,g,b,a;
132  };
133 
135  {
136  float x,y,z;
137  float nx,ny,nz;
138  float u,v;
139  };
140 
141  inline ScreenTextVertex CreateScreenTextVertex(float x, float y, float u, float v, float altColorParam)
142  {
143  const float uvScale = 65536.f;
144 
145  u16 su = static_cast<u16>(Math::Clamp(static_cast<int>(u*uvScale), 0, 0xffff));
146  u16 sv = static_cast<u16>(Math::Clamp(static_cast<int>(v*uvScale), 0, 0xffff));
147  u8 altColor = static_cast<u8>(Math::Clamp(static_cast<int>(altColorParam*256.f), 0, 0xff));
148  return ScreenTextVertex(x, y, su, sv, altColor);
149  }
150 
151  inline WorldTextVertex CreateWorldTextVertex(float x, float y, float z, float u, float v, float altColorParam)
152  {
153  const float uvScale = 65536.f;
154 
155  WorldTextVertex vtx;
156  vtx.x = x;
157  vtx.y = y;
158  vtx.z = z;
159  vtx.u = static_cast<u16>(Math::Clamp(static_cast<int>(u*uvScale), 0, 0xffff));
160  vtx.v = static_cast<u16>(Math::Clamp(static_cast<int>(v*uvScale), 0, 0xffff));
161  vtx.altColor = static_cast<u8>(Math::Clamp(static_cast<int>(altColorParam*256.f), 0, 0xff));
162  vtx.pad0 = 0;
163  vtx.pad1 = 0;
164  vtx.pad2 = 0;
165  return vtx;
166  }
167 
168  inline ColoredVertex CreateColoredVertex(const v3& position, const v4& color)
169  {
170  ColoredVertex vert;
171  vert.x = position.GetX();
172  vert.y = position.GetY();
173  vert.z = position.GetZ();
174 
175  vert.r = color.GetX();
176  vert.g = color.GetY();
177  vert.b = color.GetZ();
178  vert.a = color.GetW();
179 
180  return vert;
181  }
182 
183  inline ColoredVertex CreateColoredVertex(const v3& position, const v3& color)
184  {
185  ColoredVertex vert = CreateColoredVertex(position, v4(color, 1.f));
186  return vert;
187  }
188 
189  inline TexturedColoredVertex CreateTexturedColoredVertex(const v3& position, const v2& uv, const v4& color)
190  {
191  TexturedColoredVertex vert;
192  vert.x = position.GetX();
193  vert.y = position.GetY();
194  vert.z = position.GetZ();
195 
196  vert.u = uv.x;
197  vert.v = uv.y;
198 
199  vert.r = color.GetX();
200  vert.g = color.GetY();
201  vert.b = color.GetZ();
202  vert.a = color.GetW();
203 
204  return vert;
205 
206  }
207 
208  inline PositionVertex CreatePositionVertex(float x, float y, float z)
209  {
210  PositionVertex vtx;
211  vtx.x = x;
212  vtx.y = y;
213  vtx.z = z;
214  return vtx;
215  }
216 
217  inline PositionVertex CreatePositionVertex(const Eegeo::v3& p)
218  {
219  return CreatePositionVertex(p.x, p.y, p.z);
220  }
221 
222  inline TexturedVertex CreateTexturedVertex(float x, float y, float z, float u, float v)
223  {
224  TexturedVertex vtx;
225  vtx.x = x;
226  vtx.y = y;
227  vtx.z = z;
228  vtx.u = u;
229  vtx.v = v;
230  return vtx;
231  }
232 
233  inline TexturedVertex CreateTexturedVertex(const Eegeo::v3& p, const Eegeo::v2& uv)
234  {
235  return CreateTexturedVertex(p.x, p.y, p.z, uv.x, uv.y);
236  }
237 
239  {
240  float x, y, u, v;
241  };
242 
243  inline Textured2DVertex CreateTextured2DVertex(float x, float y, float u, float v)
244  {
245  Textured2DVertex vtx;
246  vtx.x = x;
247  vtx.y = y;
248  vtx.u = u;
249  vtx.v = v;
250  return vtx;
251  }
252 
253  inline ModelDiffuseVertex CreateModelDiffuseVertex(const Eegeo::v3& position, const Eegeo::v3& normal, const Eegeo::v2& uv)
254  {
255  ModelDiffuseVertex vtx;
256  vtx.x = position.x;
257  vtx.y = position.y;
258  vtx.z = position.z;
259  vtx.nx = normal.x;
260  vtx.ny = normal.y;
261  vtx.nz = normal.z;
262  vtx.u = uv.x;
263  vtx.v = uv.y;
264  return vtx;
265  }
266  }
267  }
268 
269 }