diff --git a/Escape-the-Dawn/Escape-the-Dawn.vcxproj b/Escape-the-Dawn/Escape-the-Dawn.vcxproj
index 07148a6..a0fcc96 100644
--- a/Escape-the-Dawn/Escape-the-Dawn.vcxproj
+++ b/Escape-the-Dawn/Escape-the-Dawn.vcxproj
@@ -149,6 +149,7 @@
+
@@ -165,6 +166,8 @@
+
+
diff --git a/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters b/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters
index 7752005..69c566e 100644
--- a/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters
+++ b/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters
@@ -146,6 +146,7 @@
+
@@ -154,6 +155,12 @@
Shaders
+
+ Shaders
+
+
+ Shaders
+
diff --git a/Escape-the-Dawn/Model.h b/Escape-the-Dawn/Model.h
index cd529fc..716d1c2 100644
--- a/Escape-the-Dawn/Model.h
+++ b/Escape-the-Dawn/Model.h
@@ -8,11 +8,7 @@
#include
#include
-#include
-#define GLFW_INCLUDE_GLU
-#include
-#include
-#define GLM_FORCE_RADIANS
+#include "OpenGL.h"
#include
#include
#include
diff --git a/Escape-the-Dawn/OpenGL.h b/Escape-the-Dawn/OpenGL.h
new file mode 100644
index 0000000..dec332d
--- /dev/null
+++ b/Escape-the-Dawn/OpenGL.h
@@ -0,0 +1,5 @@
+#include
+#define GLFW_INCLUDE_GLU
+#include
+#include
+#define GLM_FORCE_RADIANS
\ No newline at end of file
diff --git a/Escape-the-Dawn/Renderer.cpp b/Escape-the-Dawn/Renderer.cpp
index e6f01cd..617484e 100644
--- a/Escape-the-Dawn/Renderer.cpp
+++ b/Escape-the-Dawn/Renderer.cpp
@@ -55,7 +55,20 @@ void Renderer::Draw(double dt)
glClearColor(1.0f, 1.0f, 0.0f, 1.0f);
m_ShaderProgram.Bind();
+ DrawModels();
+
+#ifdef DEBUG
+ m_ShaderProgramNormals.Bind();
+ DrawModels();
+#endif
+ ModelsToRender.clear();
+
+ glfwSwapBuffers(m_Window);
+}
+
+void Renderer::DrawModels()
+{
glm::mat4 cameraMatrix = m_Camera->ProjectionMatrix() * m_Camera->ViewMatrix();
glm::mat4 MVP;
@@ -73,7 +86,7 @@ void Renderer::Draw(double dt)
glUniform1f(glGetUniformLocation(m_ShaderProgram.GetHandle(), "linearAttenuation"), 0.0f);
glUniform1f(glGetUniformLocation(m_ShaderProgram.GetHandle(), "quadraticAttenuation"), 0.0f);
-
+
glBindVertexArray(model->VAO);
for (auto texGroup : model->TextureGroups) {
glActiveTexture(GL_TEXTURE0);
@@ -81,9 +94,6 @@ void Renderer::Draw(double dt)
glDrawArrays(GL_TRIANGLES, texGroup.StartIndex, (texGroup.EndIndex - texGroup.StartIndex + 1) * abs(sin(glfwGetTime())));
}
}
- ModelsToRender.clear();
-
- glfwSwapBuffers(m_Window);
}
void Renderer::DrawText()
@@ -108,8 +118,20 @@ void Renderer::AddModelToDraw(std::shared_ptr _model, glm::vec3 _position
void Renderer::LoadContent()
{
- m_ShaderProgram.AddShader(std::unique_ptr(new VertexShader("Shaders/Vertex.glsl")));
- m_ShaderProgram.AddShader(std::unique_ptr(new FragmentShader("Shaders/Fragment.glsl")));
+ auto standardVS = std::shared_ptr(new VertexShader("Shaders/Vertex.glsl"));
+ auto standardFS = std::shared_ptr(new FragmentShader("Shaders/Fragment.glsl"));
+
+ auto normalsGS = std::shared_ptr(new GeometryShader("Shaders/Normals.geo.glsl"));
+ auto normalsFS = std::shared_ptr(new FragmentShader("Shaders/Normals.frag.glsl"));
+
+ m_ShaderProgram.AddShader(standardVS);
+ m_ShaderProgram.AddShader(standardFS);
m_ShaderProgram.Compile();
m_ShaderProgram.Link();
+
+ m_ShaderProgramNormals.AddShader(normalsGS);
+ m_ShaderProgramNormals.AddShader(standardVS);
+ m_ShaderProgramNormals.AddShader(normalsFS);
+ m_ShaderProgramNormals.Compile();
+ m_ShaderProgramNormals.Link();
}
diff --git a/Escape-the-Dawn/Renderer.h b/Escape-the-Dawn/Renderer.h
index 1077e3b..9dd1c2c 100644
--- a/Escape-the-Dawn/Renderer.h
+++ b/Escape-the-Dawn/Renderer.h
@@ -7,11 +7,7 @@
#include
#include
-#include
-#define GLFW_INCLUDE_GLU
-#include
-#include
-#define GLM_FORCE_RADIANS
+#include "OpenGL.h"
#include
#include
#include
@@ -27,7 +23,7 @@
class Renderer
{
public:
- ShaderProgram m_ShaderProgram;
+
glm::mat4 viewMatrix;
glm::mat4 projectionMatrix;
@@ -64,7 +60,11 @@ private:
std::shared_ptr m_Camera;
- GLuint vertexArrayObject;
+ ShaderProgram m_ShaderProgram;
+ ShaderProgram m_ShaderProgramNormals;
+
+ void DrawModels();
+
};
#endif // Renderer_h__
\ No newline at end of file
diff --git a/Escape-the-Dawn/ShaderProgram.cpp b/Escape-the-Dawn/ShaderProgram.cpp
index cd08061..d95aeeb 100644
--- a/Escape-the-Dawn/ShaderProgram.cpp
+++ b/Escape-the-Dawn/ShaderProgram.cpp
@@ -84,18 +84,13 @@ bool Shader::IsCompiled() const
return m_ShaderHandle != 0;
}
-ShaderProgram::ShaderProgram()
-{
- Initialize();
-}
-
ShaderProgram::~ShaderProgram()
{
Unbind();
glDeleteProgram(m_ShaderProgramHandle);
}
-void ShaderProgram::AddShader(std::unique_ptr shader)
+void ShaderProgram::AddShader(std::shared_ptr shader)
{
m_Shaders.push_back(std::move(shader));
}
@@ -111,6 +106,10 @@ void ShaderProgram::Compile()
GLuint ShaderProgram::Link()
{
+ if (m_Shaders.size() == 0) {
+ LOG_ERROR("Failed to link shader program: No shaders bound");
+ }
+
LOG_INFO("Linking shader program");
m_ShaderProgramHandle = glCreateProgram();
for (auto &shader : m_Shaders) {
@@ -119,10 +118,6 @@ GLuint ShaderProgram::Link()
glLinkProgram(m_ShaderProgramHandle);
if (GLERROR("glLinkProgram"))
return 0;
-
- for (auto &shader : m_Shaders) {
- shader.release();
- }
m_Shaders.clear();
return m_ShaderProgramHandle;
@@ -144,9 +139,4 @@ void ShaderProgram::Bind()
void ShaderProgram::Unbind()
{
glActiveShaderProgram(0, 0);
-}
-
-void ShaderProgram::Initialize()
-{
- m_ShaderProgramHandle = 0;
-}
+}
\ No newline at end of file
diff --git a/Escape-the-Dawn/ShaderProgram.h b/Escape-the-Dawn/ShaderProgram.h
index 894575a..341bb64 100644
--- a/Escape-the-Dawn/ShaderProgram.h
+++ b/Escape-the-Dawn/ShaderProgram.h
@@ -6,11 +6,7 @@
#include
#include
-#define _CRT_SECURE_NO_WARNINGS
-#include
-#define GLFW_INCLUDE_GLU
-#include
-#include
+#include "OpenGL.h"
#include "glerror.h"
@@ -68,25 +64,20 @@ public:
class ShaderProgram
{
public:
- ShaderProgram();
+ ShaderProgram()
+ : m_ShaderProgramHandle(0) { }
~ShaderProgram();
- void AddShader(std::unique_ptr shader);
-
+ void AddShader(std::shared_ptr shader);
void Compile();
GLuint Link();
-
GLuint GetHandle();
-
void Bind();
-
void Unbind();
private:
GLuint m_ShaderProgramHandle;
- std::vector> m_Shaders;
-
- void Initialize();
+ std::vector> m_Shaders;
};
#endif // ShaderProgram_h__
\ No newline at end of file
diff --git a/Escape-the-Dawn/Shaders/Normals.frag.glsl b/Escape-the-Dawn/Shaders/Normals.frag.glsl
new file mode 100644
index 0000000..fd1bb9a
--- /dev/null
+++ b/Escape-the-Dawn/Shaders/Normals.frag.glsl
@@ -0,0 +1,9 @@
+#version 430
+
+uniform mat4 MVP;
+
+out vec4 FragmentColor;
+
+void main() {
+ FragmentColor = vec4(1.0, 1.0, 1.0, 1.0);
+}
\ No newline at end of file
diff --git a/Escape-the-Dawn/Shaders/Normals.geo.glsl b/Escape-the-Dawn/Shaders/Normals.geo.glsl
new file mode 100644
index 0000000..c848a50
--- /dev/null
+++ b/Escape-the-Dawn/Shaders/Normals.geo.glsl
@@ -0,0 +1,34 @@
+#version 430
+
+uniform mat4 MVP;
+
+layout(triangles) in;
+layout(line_strip, max_vertices = 6) out;
+
+in VertexData {
+ vec3 Position;
+ vec3 Normal;
+ vec2 TextureCoord;
+} Input[3];
+
+out VertexData {
+ vec3 Position;
+ vec3 Normal;
+ vec2 TextureCoord;
+} Output;
+
+void main()
+{
+ for (int i = 0; i < gl_in.length(); i++)
+ {
+ gl_Position = MVP * vec4(Input[i].Position, 1.0);
+ EmitVertex();
+ gl_Position = MVP * vec4(Input[i].Position, 1.0) + MVP * vec4(Input[i].Normal, 0.0);
+ EmitVertex();
+ EndPrimitive();
+
+ Output.Position = Input[i].Position;
+ Output.Normal = Input[i].Normal;
+ Output.TextureCoord = Input[i].TextureCoord;
+ }
+}
\ No newline at end of file
diff --git a/Escape-the-Dawn/Systems/PlayerSystem.h b/Escape-the-Dawn/Systems/PlayerSystem.h
index 99efd8b..8058956 100644
--- a/Escape-the-Dawn/Systems/PlayerSystem.h
+++ b/Escape-the-Dawn/Systems/PlayerSystem.h
@@ -4,7 +4,6 @@
#include
#include "System.h"
-#include "Renderer.h"
#include "Components/Transform.h"
#include "Components/Input.h"
#include "logging.h"
diff --git a/Escape-the-Dawn/Systems/RenderSystem.h b/Escape-the-Dawn/Systems/RenderSystem.h
index 3795e04..086a54a 100644
--- a/Escape-the-Dawn/Systems/RenderSystem.h
+++ b/Escape-the-Dawn/Systems/RenderSystem.h
@@ -1,6 +1,8 @@
#ifndef RenderSystem_h__
#define RenderSystem_h__
+#include
+
#include "System.h"
#include "Model.h"
#include "Texture.h"
@@ -8,7 +10,6 @@
#include "Components/Transform.h"
#include "Components/Camera.h"
#include "Renderer.h"
-#include
namespace Systems
{
diff --git a/Escape-the-Dawn/Texture.h b/Escape-the-Dawn/Texture.h
index ba77847..f24cb2f 100644
--- a/Escape-the-Dawn/Texture.h
+++ b/Escape-the-Dawn/Texture.h
@@ -3,10 +3,7 @@
#include
-#include
-#define GLFW_INCLUDE_GLU
-#include
-#include
+#include "OpenGL.h"
#include
class Texture
diff --git a/Escape-the-Dawn/World.h b/Escape-the-Dawn/World.h
index 0e1a652..009c768 100644
--- a/Escape-the-Dawn/World.h
+++ b/Escape-the-Dawn/World.h
@@ -6,6 +6,7 @@
#include
#include
#include
+#include
#include