-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSimpleRenderer.cpp
More file actions
114 lines (90 loc) · 2.86 KB
/
SimpleRenderer.cpp
File metadata and controls
114 lines (90 loc) · 2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <vector>
#include <map>
#include <SFML/Window.hpp>
//OPENGL INCLUDE
#ifndef WINDOWS
#include <GLES3/gl3.h>
#else
#include <GL/glew.h>
#endif
#include <SFML/OpenGL.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include "MeshRenderer.h"
#include "SimpleRenderer.h"
//Not ideal.
void GenerateLineShaders()
{
//Hardcoded shaders. Ideally we would move all this junk somewhere else.
const char *vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"uniform mat4 MVP;\n"
"void main()\n"
"{\n"
" gl_Position = MVP * vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
"}\0";
const char *fragmentShaderSource = "#version 330 core\n"
"out vec4 FragColor;\n"
"uniform vec3 color;\n"
"void main()\n"
"{\n"
" FragColor = vec4(color, 1.0f);\n"
"}\n\0";
// vertex shader
int vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
glCompileShader(vertexShader);
// check for shader compile errors
// fragment shader
int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
glCompileShader(fragmentShader);
// check for shader compile errors
// link shaders
GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
// check for linking errors
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);
ShaderList::AddShader( "LineShader", shaderProgram );
};
CDebugLine::CDebugLine( glm::vec3 pointA, glm::vec3 pointB, glm::vec3 colour )
{
if( !ShaderList::HasShader( "LineShader" ) )
{
GenerateLineShaders();
}
shaderProgram = ShaderList::GetShader( "LineShader" );
vertices = {
pointA.x, pointA.y, pointA.z,
pointB.x, pointB.y, pointB.z,
};
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices.data(), GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
col = colour;
};
CDebugLine::~CDebugLine()
{
glDeleteVertexArrays(1, &VAO);
glDeleteBuffers(1, &VBO);
//glDeleteProgram(shaderProgram);
}
void CDebugLine::Draw( Camera cam )
{
glm::mat4 Model = glm::mat4( 1.0f ); //We dont need to do much here.
glm::mat4 mvp = cam.Projection * cam.View * Model;
glUseProgram(shaderProgram);
glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "MVP"), 1, GL_FALSE, &mvp[0][0]);
glUniform3fv(glGetUniformLocation(shaderProgram, "color"), 1, &col[0]);
glBindVertexArray(VAO);
glDrawArrays(GL_LINES, 0, 2);
glBindVertexArray(0);
};