#include "Debug.h" #include #include void Debug::Render(DefaultUniform& uniform) { RenderLines(uniform); _lines.clear(); } void Debug::RenderLines(DefaultUniform& uniform) const { glUseProgram(_shader); glBindVertexArray(_vba); glBindBuffer(GL_ARRAY_BUFFER, _vbo); int vertexCount = _lines.size() * 6; int viewportWidth, viewportHeight; glfwGetFramebufferSize(_window, &viewportWidth, &viewportHeight); glm::vec2 viewport = glm::vec2(viewportWidth, viewportHeight); glUniform2fv(_uniformViewportRes, 1, glm::value_ptr(viewport)); glUniformMatrix4fv(_uniformModel, 1, GL_FALSE, glm::value_ptr(uniform.model)); glUniformMatrix4fv(_uniformView, 1, GL_FALSE, glm::value_ptr(uniform.view)); glUniformMatrix4fv(_uniformProjection, 1, GL_FALSE, glm::value_ptr(uniform.projection)); DebugVertexData* data = new DebugVertexData[vertexCount]; int index = 0; for(const auto& line : _lines) { int vertexIndex = index * 6; glm::vec3 quad[4] = { line.positionFirst, line.positionFirst, line.positionLast, line.positionLast }; glm::vec3 direction = line.positionLast - line.positionFirst; data[ vertexIndex + 0 ] = DebugVertexData { quad[0], direction, line.color, line.lineWidth }; data[ vertexIndex + 1 ] = DebugVertexData { quad[1], direction, line.color, line.lineWidth }; data[ vertexIndex + 2 ] = DebugVertexData { quad[2], direction, line.color, line.lineWidth }; data[ vertexIndex + 3 ] = DebugVertexData { quad[1], direction, line.color, line.lineWidth }; data[ vertexIndex + 4 ] = DebugVertexData { quad[2], direction, line.color, line.lineWidth }; data[ vertexIndex + 5 ] = DebugVertexData { quad[3], direction, line.color, line.lineWidth }; index++; } glBufferData(GL_ARRAY_BUFFER, sizeof(DebugVertexData) * vertexCount, data, GL_STATIC_DRAW); glDrawArrays(GL_TRIANGLES, 0, vertexCount); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0); glUseProgram(0); delete[] data; }