50 SquareGlyph(
const glm::vec4& destRect,
const Color& color,
float angle,
float mdepth)
52 glm::vec3 atopLeft(destRect.x, destRect.y, mdepth);
53 glm::vec3 abottomLeft(destRect.x, destRect.y + destRect.w, mdepth);
54 glm::vec3 abottomRight(destRect.x + destRect.z, destRect.y + destRect.w, mdepth);
55 glm::vec3 atopRight(destRect.x + destRect.z, destRect.y, mdepth);
57 topLeft.color = color;
58 topLeft.setPosition(atopLeft);
60 bottomLeft.color = color;
61 bottomLeft.setPosition(abottomLeft);
63 bottomRight.color = color;
64 bottomRight.setPosition(abottomRight);
66 topRight.color = color;
67 topRight.setPosition(atopRight);
81 BoxGlyph(
const glm::vec3& origin,
const glm::vec3& size,
const Color& color,
float angle)
84 glm::vec3 atopLeft(origin.x, origin.y, origin.z);
85 glm::vec3 abottomLeft(origin.x, origin.y + size.y, origin.z);
86 glm::vec3 abottomRight(origin.x + size.x, origin.y + size.y, origin.z);
87 glm::vec3 atopRight(origin.x + size.x, origin.y, origin.z);
89 a_topLeft.color = color;
90 a_topLeft.setPosition(atopLeft);
92 a_bottomLeft.color = color;
93 a_bottomLeft.setPosition(abottomLeft);
95 a_bottomRight.color = color;
96 a_bottomRight.setPosition(abottomRight);
98 a_topRight.color = color;
99 a_topRight.setPosition(atopRight);
101 glm::vec3 btopLeft(origin.x, origin.y, origin.z + size.z);
102 glm::vec3 bbottomLeft(origin.x, origin.y + size.y, origin.z + size.z);
103 glm::vec3 bbottomRight(origin.x + size.x, origin.y + size.y, origin.z + size.z);
104 glm::vec3 btopRight(origin.x + size.x, origin.y, origin.z + size.z);
106 b_topLeft.color = color;
107 b_topLeft.setPosition(btopLeft);
109 b_bottomLeft.color = color;
110 b_bottomLeft.setPosition(bbottomLeft);
112 b_bottomRight.color = color;
113 b_bottomRight.setPosition(bbottomRight);
115 b_topRight.color = color;
116 b_topRight.setPosition(btopRight);
133 const char* VERT_SRC = R
"(#version 400
135in vec3 vertexPosition; //vec3 is array of 3 floats
138out vec4 fragmentColor;
140uniform mat4 u_ViewProjection;
143 gl_Position = u_ViewProjection * vec4(vertexPosition.xyz, 1.0);
145 fragmentColor = vertexColor;
148 const char* FRAG_SRC = R
"(#version 400
150in vec4 fragmentColor;
152out vec4 color; //rgb value
155 color = vec4(fragmentColor.rgb, fragmentColor.a);
166 void initBatchLines(
size_t msize);
168 void initBatchSquares(
size_t msize);
170 void initBatchBoxes(
size_t msize);
172 void drawLine(
size_t v_index,
const glm::vec3 srcPosition,
const glm::vec3 destPosition,
const Color& srcColor,
const Color& destColor);
173 void drawRectangle(
size_t v_index,
const glm::vec4& destRect,
const Color& color,
float angle,
float zIndex =0.0f);
174 void drawBox(
size_t v_index,
const glm::vec3& origin,
const glm::vec3& size,
const Color& color,
float angle);
175 void drawCircle(
const glm::vec2& center,
const Color& color,
float radius);
177 void initBatchSize();
178 void renderBatch(
float lineWidth);
182 int box_edgePairs[12][2] = {
183 {0, 1}, {1, 2}, {2, 3}, {3, 0},
184 {4, 5}, {5, 6}, {6, 7}, {7, 4},
185 {0, 4}, {1, 5}, {2, 6}, {3, 7}
189 void createRenderBatches();
190 void createVertexArray();
192 GLuint _vbo = 0, _vao = 0, _ibo = 0;
194 std::vector<ColorVertex> _vertices;
195 std::vector<GLuint> _indices;
197 size_t _lineGlyphs_size = 0;
198 size_t _squareGlyphs_size = 0;
199 size_t _boxGlyphs_size = 0;
201 size_t _rectangles_verticesOffset = 0;
202 size_t _lines_verticesOffset = 0;
203 size_t _boxes_verticesOffset= 0;
205 size_t _rectangles_indicesOffset = 0;
206 size_t _lines_indicesOffset = 0;
207 size_t _boxes_indicesOffset = 0;
209 std::vector<RenderLineBatch> _renderBatches;