2025-01-19 14:17:36 +01:00

69 lines
1.9 KiB
C++

#include "Debug.h"
#include <GLFW/glfw3.h>
#include <glm/ext.hpp>
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;
}