src/gl/common.h

changeset 200
ca23936b455b
parent 189
815fbaae9cb2
child 206
654661eab7f3
equal deleted inserted replaced
199:6988973515d2 200:ca23936b455b
25 #include <QOpenGLShaderProgram> 25 #include <QOpenGLShaderProgram>
26 #include <QOpenGLVertexArrayObject> 26 #include <QOpenGLVertexArrayObject>
27 #include <glm/gtc/type_ptr.hpp> 27 #include <glm/gtc/type_ptr.hpp>
28 #include "basics.h" 28 #include "basics.h"
29 #include "colors.h" 29 #include "colors.h"
30 #include "model.h"
30 31
31 namespace gl 32 namespace gl
32 { 33 {
33 struct Polygon; 34 struct Polygon;
34 class ShaderProgram; 35 class ShaderProgram;
75 Quadrilateral, 76 Quadrilateral,
76 ConditionalEdge 77 ConditionalEdge
77 } type; 78 } type;
78 glm::vec3 vertices[4]; 79 glm::vec3 vertices[4];
79 ldraw::Color color; 80 ldraw::Color color;
80 ldraw::id_t id; 81 ModelId id;
81 82
82 /** 83 /**
83 * @return amount of vertices used for geometry 84 * @return amount of vertices used for geometry
84 */ 85 */
85 inline unsigned int numPolygonVertices() const 86 inline unsigned int numPolygonVertices() const
122 Polygon::Type::ConditionalEdge 123 Polygon::Type::ConditionalEdge
123 }; 124 };
124 125
125 constexpr int NUM_POLYGON_TYPES = countof(POLYGON_TYPES); 126 constexpr int NUM_POLYGON_TYPES = countof(POLYGON_TYPES);
126 127
127 inline Polygon edgeLine(const glm::vec3& v_1, const glm::vec3& v_2, ldraw::Color color, ldraw::id_t id) 128 inline Polygon edgeLine(const Colored<LineSegment>& seg, ModelId id)
128 { 129 {
129 return {Polygon::EdgeLine, {v_1, v_2}, color, id}; 130 return Polygon{
130 } 131 .type = Polygon::EdgeLine,
131 132 .vertices = {seg.p1, seg.p2},
132 inline Polygon triangle( 133 .color = seg.color,
133 const glm::vec3& v_1, 134 .id = id,
134 const glm::vec3& v_2, 135 };
135 const glm::vec3& v_3, 136 }
136 ldraw::Color color, 137
137 ldraw::id_t id) 138 inline Polygon triangle(const Colored<Triangle>& tri, ModelId id)
138 { 139 {
139 return {Polygon::Triangle, {v_1, v_2, v_3}, color, id}; 140 return Polygon{
140 } 141 .type = Polygon::Triangle,
141 142 .vertices = {tri.p1, tri.p2, tri.p3},
142 inline Polygon quadrilateral( 143 .color = tri.color,
143 const glm::vec3& v_1, 144 .id = id,
144 const glm::vec3& v_2, 145 };
145 const glm::vec3& v_3, 146 }
146 const glm::vec3& v_4, 147
147 ldraw::Color color, 148 inline Polygon quadrilateral(const Colored<Quadrilateral>& quad, ModelId id)
148 ldraw::id_t id) 149 {
149 { 150 return Polygon{
150 return {Polygon::Quadrilateral, {v_1, v_2, v_3, v_4}, color, id}; 151 .type = Polygon::Quadrilateral,
151 } 152 .vertices = {quad.p1, quad.p2, quad.p3, quad.p4},
152 153 .color = quad.color,
153 inline Polygon conditionalEdge( 154 .id = id,
154 const glm::vec3& v_1, 155 };
155 const glm::vec3& v_2, 156 }
156 const glm::vec3& control_1, 157
157 const glm::vec3& control_2, 158 inline Polygon conditionalEdge(const Colored<ConditionalEdge>& cedge, ModelId id)
158 ldraw::Color color, 159 {
159 ldraw::id_t id) 160 return Polygon{
160 { 161 .type = Polygon::ConditionalEdge,
161 return {Polygon::ConditionalEdge, {v_1, v_2, control_1, control_2}, color, id}; 162 .vertices = {cedge.p1, cedge.p2, cedge.c1, cedge.c2},
163 .color = cedge.color,
164 .id = id,
165 };
162 } 166 }
163 167
164 // Vbo names 168 // Vbo names
165 enum class ArrayClass : std::uint8_t 169 enum class ArrayClass : std::uint8_t
166 { 170 {

mercurial