5 #define CIRCLE_LINES 90
8 "in vec3 fragmentPosition;\n"
9 "in vec4 fragmentColour;\n"
12 " colour = fragmentColour;\n"
17 "in vec3 vertexPosition;\n"
18 "in vec4 vertexColour;\n"
19 "out vec3 fragmentPosition;\n"
20 "out vec4 fragmentColour;\n"
22 " gl_Position = vec4(vertexPosition.xyz, 1.0);\n"
23 " fragmentPosition = vertexPosition;\n"
24 " fragmentColour = vertexColour;\n"
44 float radians = 2.0f * M_PI * ((float)i / ((
float)
CIRCLE_LINES - 2.0f));
45 float x0 = std::sin(radians) * radius;
46 float y0 = std::cos(radians) * radius;
50 glm::vec2 newPoint0 = glm::vec2(lastX, lastY) + p0, newPoint1 = glm::vec2(x0, y0) + p0;
51 l.
construct(newPoint0, newPoint1, lineThick, fillCol);
62 glm::vec2 pos(posSize.x, posSize.y), size(posSize.z, posSize.w);
64 lines[0].
construct(pos, pos + size * glm::vec2(0.0f, 1.0f), lineThick, fillCol);
65 lines[1].
construct(pos + size * glm::vec2(1.0f, 0.0f), pos + size * glm::vec2(1.0f, 1.0f), lineThick, fillCol);
78 link({
"vertexPosition",
"vertexColour"});
87 (
void*)offsetof(
Vertex, colour));
100 m_lines.back().construct(point0, point1, thickness, colour);
105 m_circles.back().construct(centre, lineThickness, radius, fillColour);
110 m_rectangles.back().construct(destRect, lineThickness, fillColour);
115 std::vector<Vertex> lineVertices;
116 lineVertices.resize(
m_lines.size() * 2);
118 std::vector<Vertex> circleVertices;
122 std::vector<Vertex> rectangleVertices;
127 for(
unsigned int i = 0; i <
m_lines.size(); i++) {
129 lineVertices[2 * i].setPosition(
m_lines[i].point0.x,
m_lines[i].point0.y, 0.0f);
130 lineVertices[2 * i + 1].setPosition(
m_lines[i].point1.x,
m_lines[i].point1.y, 0.0f);
133 lineVertices[2 * i].colour =
m_lines[i].colour;
134 lineVertices[2 * i + 1].colour =
m_lines[i].colour;
140 for(
unsigned int i = 0; i <
m_circles.size(); i++) {
143 for(
unsigned int vertex = 1; vertex <
CIRCLE_LINES; vertex++) {
159 rectangleVertices[4 * i].setPosition(
m_rectangles[i].lines[0].point0.x,
162 rectangleVertices[4 * i + 1].setPosition(
m_rectangles[i].lines[0].point1.x,
165 rectangleVertices[4 * i + 2].setPosition(
m_rectangles[i].lines[1].point0.x,
168 rectangleVertices[4 * i + 3].setPosition(
m_rectangles[i].lines[1].point1.x,
173 rectangleVertices[4 * i].colour =
m_rectangles[i].lines[0].colour;
174 rectangleVertices[4 * i + 1].colour =
m_rectangles[i].lines[0].colour;
175 rectangleVertices[4 * i + 2].colour =
m_rectangles[i].lines[0].colour;
176 rectangleVertices[4 * i + 3].colour =
m_rectangles[i].lines[0].colour;
186 std::vector<Vertex> verticesTotal;
187 verticesTotal.reserve(lineVertices.size() + circleVertices.size() + rectangleVertices.size());
188 verticesTotal.insert(verticesTotal.end(), lineVertices.begin(), lineVertices.end());
189 verticesTotal.insert(verticesTotal.end(), circleVertices.begin(), circleVertices.end());
190 verticesTotal.insert(verticesTotal.end(), rectangleVertices.begin(), rectangleVertices.end());
193 glBufferData(GL_ARRAY_BUFFER, verticesTotal.size() *
sizeof(
Vertex), verticesTotal.data(), GL_DYNAMIC_DRAW);
207 for(
unsigned int i = 0; i <
m_lines.size(); i++) {
208 glLineWidth(
m_lines[i].thickness);
209 glDrawArrays(GL_LINES, offset, (GLsizei)2);
214 for(
unsigned int i = 0; i <
m_circles.size(); i++) {
215 glDrawArrays(GL_TRIANGLE_FAN, offset, (GLsizei)
CIRCLE_LINES);
221 glDrawArrays(GL_TRIANGLE_STRIP, offset, (GLsizei)4);