24 float back_diffuse[4];
25 float back_specular[4];
31 inline void SetPosition(
const float* value) { memcpy(pos, value,
sizeof(pos)); }
33 inline void SetPosition(
float x,
float y,
float z,
float w = 1.0f) {
40 inline void SetWeight(
float w) { weight = w; }
42 inline void SetNormal(
const float* value) { memcpy(normal, value,
sizeof(normal)); }
44 inline void SetNormal(
float x,
float y,
float z) {
50 inline void SetDiffuse(
const float* value) { memcpy(diffuse, value,
sizeof(diffuse)); }
52 inline void SetDiffuse(
float r,
float g,
float b,
float a = 1.0f) {
59 inline void SetSpecular(
const float* value) { memcpy(specular, value,
sizeof(specular)); }
61 inline void SetSpecular(
float r,
float g,
float b,
float a = 1.0f) {
68 inline void SetFogCoord(
float v) { fog_coord = v; }
69 inline void SetPointSize(
float v) { point_size = v; }
71 inline void SetBackDiffuse(
const float* value) { memcpy(back_diffuse, value,
sizeof(back_diffuse)); }
73 inline void SetBackDiffuse(
float r,
float g,
float b,
float a = 1.0f) {
80 inline void SetBackSpecular(
const float* value) { memcpy(back_specular, value,
sizeof(back_specular)); }
82 inline void SetBackSpecular(
float r,
float g,
float b,
float a = 1.0f) {
89 inline void SetTexCoord0(
const float* value) { memcpy(texcoord0, value,
sizeof(texcoord0)); }
91 inline void SetTexCoord0(
const float u,
const float v) {
96 inline void SetTexCoord0(
const float u,
const float v,
const float s,
const float q) {
103 inline void SetTexCoord1(
const float* value) { memcpy(texcoord1, value,
sizeof(texcoord1)); }
105 inline void SetTexCoord1(
const float u,
const float v) {
110 inline void SetTexCoord1(
const float u,
const float v,
const float s,
const float q) {
117 inline void SetTexCoord2(
const float* value) { memcpy(texcoord2, value,
sizeof(texcoord2)); }
119 inline void SetTexCoord2(
const float u,
const float v) {
124 inline void SetTexCoord2(
const float u,
const float v,
const float s,
const float q) {
131 inline void SetTexCoord3(
const float* value) { memcpy(texcoord3, value,
sizeof(texcoord3)); }
133 inline void SetTexCoord3(
const float u,
const float v) {
138 inline void SetTexCoord3(
const float u,
const float v,
const float s,
const float q) {
145 inline void SetDiffuseGrey(
float val) { SetDiffuse(val, val, val); }
147 void SetDiffuseGrey(
float val,
float alpha) { SetDiffuse(val, val, val, alpha); }
149 inline void SetSpecularGrey(
float val) { SetSpecular(val, val, val); }
151 void SetSpecularGrey(
float val,
float alpha) { SetSpecular(val, val, val, alpha); }
153 uint32_t GetDiffuseARGB()
const {
return TO_BGRA(diffuse); }
155 uint32_t GetSpecularARGB()
const {
return TO_BGRA(specular); }
157 void Translate(
float x,
float y,
float z,
float w);
211 [[nodiscard]] std::shared_ptr<VertexBuffer> ConvertFromTriangleStripToTriangles()
const;
216 [[nodiscard]] uint32_t GetNumVertices()
const {
return num_vertices_; }
218 void SetCacheValid(
bool valid =
true) { cache_valid_ = valid; }
219 [[nodiscard]]
bool IsCacheValid()
const {
return cache_valid_; }
221 void Linearize(
float texture_width,
float texture_height);
224 void DefineTriangleCCW(uint32_t start_index,
const float* one,
const float* two,
const float* three);
225 void DefineTriangleCCW(uint32_t start_index,
const float* one,
const float* two,
const float* three,
226 const float* normal_one,
const float* normal_two,
const float* normal_three);
227 void DefineTriangleCCW(uint32_t start_index,
const float* one,
const float* two,
const float* three,
228 const Color& one_diffuse,
const Color& two_diffuse,
const Color& three_diffuse);
229 void DefineTriangleCCW(uint32_t start_index,
const float* one,
const float* two,
const float* three,
230 const float* normal_one,
const float* normal_two,
const float* normal_three,
231 const Color& diffuse_one,
const Color& diffuse_two,
const Color& diffuse_three);
232 void DefineTriangle(uint32_t start_index,
const float* one,
const float* two,
const float* three);
233 void DefineTriangle(uint32_t start_index,
const float* one,
const float* two,
const float* three,
234 const float* normal_one,
const float* normal_two,
const float* normal_three);
235 void DefineTriangle(uint32_t start_index,
const float* one,
const float* two,
const float* three,
236 const Color& diffuse_one,
const Color& diffuse_two,
const Color& diffuse_three);
237 void DefineTriangle(uint32_t start_index,
const float* one,
const float* two,
const float* three,
238 const float* normal_one,
const float* normal_two,
const float* normal_three,
239 const Color& diffuse_one,
const Color& diffuse_two,
const Color& diffuse_three);
242 void DefineBiTriCCW(uint32_t start_index,
float left,
float top,
float right,
float bottom);
243 void DefineBiTriCCW(uint32_t start_index,
float left,
float top,
float right,
float bottom,
float z);
244 void DefineBiTriCCW(uint32_t start_index,
float left,
float top,
float right,
float bottom,
float ul_z,
float ll_z,
245 float lr_z,
float ur_z);
246 void DefineBiTriCCW(uint32_t start_index,
float left,
float top,
float right,
float bottom,
float ul_z,
float ll_z,
247 float lr_z,
float ur_z,
const Color& ul_diffuse,
const Color& ll_diffuse,
const Color& lr_diffuse,
248 const Color& ur_diffuse);
249 void DefineBiTriCCW(uint32_t start_index,
float left,
float top,
float right,
float bottom,
float ul_z,
float ll_z,
250 float lr_z,
float ur_z,
const Color& ul_diffuse,
const Color& ll_diffuse,
const Color& lr_diffuse,
251 const Color& ur_diffuse,
const Color& ul_specular,
const Color& ll_specular,
252 const Color& lr_specular,
const Color& ur_specular);
254 void DefineBiTri(uint32_t start_index,
float left,
float top,
float right,
float bottom);
255 void DefineBiTri(uint32_t start_index,
float left,
float top,
float right,
float bottom,
float z);
256 void DefineBiTri(uint32_t start_index,
float left,
float top,
float right,
float bottom,
float ul_z,
float ll_z,
257 float lr_z,
float ur_z);
258 void DefineBiTri(uint32_t start_index,
float left,
float top,
float right,
float bottom,
float ul_z,
float ll_z,
259 float lr_z,
float ur_z,
const Color& ul_diffuse,
const Color& ll_diffuse,
const Color& lr_diffuse,
260 const Color& ur_diffuse);
261 void DefineBiTri(uint32_t start_index,
float left,
float top,
float right,
float bottom,
float ul_z,
float ll_z,
262 float lr_z,
float ur_z,
const Color& ul_diffuse,
const Color& ll_diffuse,
const Color& lr_diffuse,
263 const Color& ur_diffuse,
const Color& ul_specular,
const Color& ll_specular,
264 const Color& lr_specular,
const Color& ur_specular);
266 inline void DefineBiTri(uint32_t start_index,
const vector_t ul,
const vector_t ll,
const vector_t lr,
268 Color diffuse(1.0, 1.0, 1.0, 1.0);
269 Color specular(1.0, 1.0, 1.0, 1.0);
270 DefineBiTri(start_index, ul, ll, lr, ur, diffuse, diffuse, diffuse, diffuse, specular, specular, specular,
274 inline void DefineBiTri(uint32_t start_index,
const vector_t ul,
const vector_t ll,
const vector_t lr,
275 const vector_t ur,
const Color& ul_diffuse,
const Color& ll_diffuse,
const Color& lr_diffuse,
276 const Color& ur_diffuse) {
277 Color specular(1.0, 1.0, 1.0, 1.0);
278 DefineBiTri(start_index, ul, ll, lr, ur, ul_diffuse, ll_diffuse, lr_diffuse, ur_diffuse, specular, specular,
282 void DefineBiTri(uint32_t start_index,
const vector_t ul,
const vector_t ll,
const vector_t lr,
const vector_t ur,
283 const Color& ul_diffuse,
const Color& ll_diffuse,
const Color& lr_diffuse,
const Color& ur_diffuse,
284 const Color& ul_specular,
const Color& ll_specular,
const Color& lr_specular,
285 const Color& ur_specular);
287 void SetDiffuse(uint32_t vertex_index,
const Color& color);
288 void SetSpecular(uint32_t vertex_index,
const Color& color);
290 inline void SetPositionIncludesW(
bool enabled =
true) { position_count_ = enabled ? 4 : 3; }
291 inline void SetTexCoord0Count(uint32_t val) { tex0_coord_count_ = val; }
292 inline void SetTexCoord1Count(uint32_t val) { tex1_coord_count_ = val; }
293 inline void SetTexCoord2Count(uint32_t val) { tex2_coord_count_ = val; }
294 inline void SetTexCoord3Count(uint32_t val) { tex3_coord_count_ = val; }
296 void Translate(
float x,
float y,
float z,
float w = 0.0f);
301 uint32_t num_vertices_;
302 Vertex* linear_vertex_buffer_ =
nullptr;
303 Vertex* normalized_vertex_buffer_ =
nullptr;
306 uint32_t position_count_ = 3;
309 uint32_t tex0_coord_count_ = 2;
310 uint32_t tex1_coord_count_ = 2;
311 uint32_t tex2_coord_count_ = 2;
312 uint32_t tex3_coord_count_ = 2;
314 bool cache_valid_{
false};