69 lines
1.9 KiB
C++
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;
|
|
}
|