GteIndexAttribute.h
Go to the documentation of this file.
1 // David Eberly, Geometric Tools, Redmond WA 98052
2 // Copyright (c) 1998-2017
3 // Distributed under the Boost Software License, Version 1.0.
4 // http://www.boost.org/LICENSE_1_0.txt
5 // http://www.geometrictools.com/License/Boost/LICENSE_1_0.txt
6 // File Version: 3.3.1 (2016/11/14)
7 
8 #pragma once
9 
10 #include <GTEngineDEF.h>
11 #include <cstddef>
12 #include <cstdint>
13 
14 // The IndexAttribute class represents an array of triples of indices into a
15 // vertex array for an indexed triangle mesh. For now, the source must be
16 // either uint16_t or uint32_t.
17 
18 namespace gte
19 {
20 
22 {
23  // Construction.
24  inline IndexAttribute();
25  inline IndexAttribute(void* inSource, size_t inSize);
26 
27  // Triangle access.
28  inline void SetTriangle(uint32_t t, uint32_t v0, uint32_t v1, uint32_t v2);
29  inline void GetTriangle(uint32_t t, uint32_t& v0, uint32_t& v1, uint32_t& v2) const;
30 
31  // The source pointer must be 4-byte aligned, which is guaranteed on
32  // 32-bit and 64-bit architectures. The size is the number of bytes
33  // per index.
34  void* source;
35  size_t size;
36 };
37 
38 
40  :
41  source(nullptr),
42  size(0)
43 {
44 }
45 
46 inline IndexAttribute::IndexAttribute(void* inSource, size_t inSize)
47  :
48  source(inSource),
49  size(inSize)
50 {
51 }
52 
53 inline void IndexAttribute::SetTriangle(uint32_t t, uint32_t v0, uint32_t v1, uint32_t v2)
54 {
55  if (size == sizeof(uint32_t))
56  {
57  uint32_t* index = reinterpret_cast<uint32_t*>(source) + 3 * t;
58  index[0] = v0;
59  index[1] = v1;
60  index[2] = v2;
61  return;
62  }
63 
64  if (size == sizeof(uint16_t))
65  {
66  uint16_t* index = reinterpret_cast<uint16_t*>(source) + 3 * t;
67  index[0] = static_cast<uint16_t>(v0);
68  index[1] = static_cast<uint16_t>(v1);
69  index[2] = static_cast<uint16_t>(v2);
70  return;
71  }
72 
73  // Unsupported type.
74 }
75 
76 inline void IndexAttribute::GetTriangle(uint32_t t, uint32_t& v0, uint32_t& v1, uint32_t& v2) const
77 {
78  if (size == sizeof(uint32_t))
79  {
80  uint32_t* index = reinterpret_cast<uint32_t*>(source) + 3 * t;
81  v0 = index[0];
82  v1 = index[1];
83  v2 = index[2];
84  return;
85  }
86 
87  if (size == sizeof(uint16_t))
88  {
89  uint16_t* index = reinterpret_cast<uint16_t*>(source) + 3 * t;
90  v0 = static_cast<uint32_t>(index[0]);
91  v1 = static_cast<uint32_t>(index[1]);
92  v2 = static_cast<uint32_t>(index[2]);
93  return;
94  }
95 
96  // Unsupported type.
97  v0 = 0;
98  v1 = 0;
99  v2 = 0;
100 }
101 
102 }
void GetTriangle(uint32_t t, uint32_t &v0, uint32_t &v1, uint32_t &v2) const
GLfloat GLfloat v1
Definition: glcorearb.h:812
GLsizeiptr size
Definition: glcorearb.h:659
void SetTriangle(uint32_t t, uint32_t v0, uint32_t v1, uint32_t v2)
GLsizei GLsizei GLchar * source
Definition: glcorearb.h:798
GLfloat v0
Definition: glcorearb.h:811
GLdouble GLdouble t
Definition: glext.h:239
GLfloat GLfloat GLfloat v2
Definition: glcorearb.h:813
GLuint index
Definition: glcorearb.h:781


geometric_tools_engine
Author(s): Yijiang Huang
autogenerated on Thu Jul 18 2019 04:00:00