Debug draw normals.

This commit is contained in:
2014-03-11 14:46:43 +01:00
parent 176852ebdd
commit 6c6ce62e9a
14 changed files with 109 additions and 54 deletions
+3
View File
@@ -149,6 +149,7 @@
<ClInclude Include="MenuFrame.h" /> <ClInclude Include="MenuFrame.h" />
<ClInclude Include="Model.h" /> <ClInclude Include="Model.h" />
<ClInclude Include="OBJ.h" /> <ClInclude Include="OBJ.h" />
<ClInclude Include="OpenGL.h" />
<ClInclude Include="Renderer.h" /> <ClInclude Include="Renderer.h" />
<ClInclude Include="ShaderProgram.h" /> <ClInclude Include="ShaderProgram.h" />
<ClInclude Include="Systems\InputSystem.h" /> <ClInclude Include="Systems\InputSystem.h" />
@@ -165,6 +166,8 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="Shaders\Fragment.glsl" /> <None Include="Shaders\Fragment.glsl" />
<None Include="Shaders\Normals.frag.glsl" />
<None Include="Shaders\Normals.geo.glsl" />
<None Include="Shaders\Vertex.glsl" /> <None Include="Shaders\Vertex.glsl" />
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
@@ -146,6 +146,7 @@
<ClInclude Include="GameWorld.h" /> <ClInclude Include="GameWorld.h" />
<ClInclude Include="Camera.h" /> <ClInclude Include="Camera.h" />
<ClInclude Include="OBJ.h" /> <ClInclude Include="OBJ.h" />
<ClInclude Include="OpenGL.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="Shaders\Fragment.glsl"> <None Include="Shaders\Fragment.glsl">
@@ -154,6 +155,12 @@
<None Include="Shaders\Vertex.glsl"> <None Include="Shaders\Vertex.glsl">
<Filter>Shaders</Filter> <Filter>Shaders</Filter>
</None> </None>
<None Include="Shaders\Normals.geo.glsl">
<Filter>Shaders</Filter>
</None>
<None Include="Shaders\Normals.frag.glsl">
<Filter>Shaders</Filter>
</None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Filter Include="Systems"> <Filter Include="Systems">
+1 -5
View File
@@ -8,11 +8,7 @@
#include <vector> #include <vector>
#include <memory> #include <memory>
#include <GL/glew.h> #include "OpenGL.h"
#define GLFW_INCLUDE_GLU
#include <GLFW/glfw3.h>
#include <glext.h>
#define GLM_FORCE_RADIANS
#include <glm/glm.hpp> #include <glm/glm.hpp>
#include <glm/gtc/constants.hpp> #include <glm/gtc/constants.hpp>
#include <glm/gtc/matrix_transform.hpp> #include <glm/gtc/matrix_transform.hpp>
+5
View File
@@ -0,0 +1,5 @@
#include <GL/glew.h>
#define GLFW_INCLUDE_GLU
#include <GLFW/glfw3.h>
#include <glext.h>
#define GLM_FORCE_RADIANS
+28 -6
View File
@@ -55,7 +55,20 @@ void Renderer::Draw(double dt)
glClearColor(1.0f, 1.0f, 0.0f, 1.0f); glClearColor(1.0f, 1.0f, 0.0f, 1.0f);
m_ShaderProgram.Bind(); 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 cameraMatrix = m_Camera->ProjectionMatrix() * m_Camera->ViewMatrix();
glm::mat4 MVP; 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(), "linearAttenuation"), 0.0f);
glUniform1f(glGetUniformLocation(m_ShaderProgram.GetHandle(), "quadraticAttenuation"), 0.0f); glUniform1f(glGetUniformLocation(m_ShaderProgram.GetHandle(), "quadraticAttenuation"), 0.0f);
glBindVertexArray(model->VAO); glBindVertexArray(model->VAO);
for (auto texGroup : model->TextureGroups) { for (auto texGroup : model->TextureGroups) {
glActiveTexture(GL_TEXTURE0); 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()))); glDrawArrays(GL_TRIANGLES, texGroup.StartIndex, (texGroup.EndIndex - texGroup.StartIndex + 1) * abs(sin(glfwGetTime())));
} }
} }
ModelsToRender.clear();
glfwSwapBuffers(m_Window);
} }
void Renderer::DrawText() void Renderer::DrawText()
@@ -108,8 +118,20 @@ void Renderer::AddModelToDraw(std::shared_ptr<Model> _model, glm::vec3 _position
void Renderer::LoadContent() void Renderer::LoadContent()
{ {
m_ShaderProgram.AddShader(std::unique_ptr<Shader>(new VertexShader("Shaders/Vertex.glsl"))); auto standardVS = std::shared_ptr<Shader>(new VertexShader("Shaders/Vertex.glsl"));
m_ShaderProgram.AddShader(std::unique_ptr<Shader>(new FragmentShader("Shaders/Fragment.glsl"))); auto standardFS = std::shared_ptr<Shader>(new FragmentShader("Shaders/Fragment.glsl"));
auto normalsGS = std::shared_ptr<Shader>(new GeometryShader("Shaders/Normals.geo.glsl"));
auto normalsFS = std::shared_ptr<Shader>(new FragmentShader("Shaders/Normals.frag.glsl"));
m_ShaderProgram.AddShader(standardVS);
m_ShaderProgram.AddShader(standardFS);
m_ShaderProgram.Compile(); m_ShaderProgram.Compile();
m_ShaderProgram.Link(); m_ShaderProgram.Link();
m_ShaderProgramNormals.AddShader(normalsGS);
m_ShaderProgramNormals.AddShader(standardVS);
m_ShaderProgramNormals.AddShader(normalsFS);
m_ShaderProgramNormals.Compile();
m_ShaderProgramNormals.Link();
} }
+7 -7
View File
@@ -7,11 +7,7 @@
#include <sstream> #include <sstream>
#include <vector> #include <vector>
#include <GL/glew.h> #include "OpenGL.h"
#define GLFW_INCLUDE_GLU
#include <GLFW/glfw3.h>
#include <glext.h>
#define GLM_FORCE_RADIANS
#include <glm/glm.hpp> #include <glm/glm.hpp>
#include <glm/gtc/constants.hpp> #include <glm/gtc/constants.hpp>
#include <glm/gtc/matrix_transform.hpp> #include <glm/gtc/matrix_transform.hpp>
@@ -27,7 +23,7 @@
class Renderer class Renderer
{ {
public: public:
ShaderProgram m_ShaderProgram;
glm::mat4 viewMatrix; glm::mat4 viewMatrix;
glm::mat4 projectionMatrix; glm::mat4 projectionMatrix;
@@ -64,7 +60,11 @@ private:
std::shared_ptr<Camera> m_Camera; std::shared_ptr<Camera> m_Camera;
GLuint vertexArrayObject; ShaderProgram m_ShaderProgram;
ShaderProgram m_ShaderProgramNormals;
void DrawModels();
}; };
#endif // Renderer_h__ #endif // Renderer_h__
+6 -16
View File
@@ -84,18 +84,13 @@ bool Shader::IsCompiled() const
return m_ShaderHandle != 0; return m_ShaderHandle != 0;
} }
ShaderProgram::ShaderProgram()
{
Initialize();
}
ShaderProgram::~ShaderProgram() ShaderProgram::~ShaderProgram()
{ {
Unbind(); Unbind();
glDeleteProgram(m_ShaderProgramHandle); glDeleteProgram(m_ShaderProgramHandle);
} }
void ShaderProgram::AddShader(std::unique_ptr<Shader> shader) void ShaderProgram::AddShader(std::shared_ptr<Shader> shader)
{ {
m_Shaders.push_back(std::move(shader)); m_Shaders.push_back(std::move(shader));
} }
@@ -111,6 +106,10 @@ void ShaderProgram::Compile()
GLuint ShaderProgram::Link() GLuint ShaderProgram::Link()
{ {
if (m_Shaders.size() == 0) {
LOG_ERROR("Failed to link shader program: No shaders bound");
}
LOG_INFO("Linking shader program"); LOG_INFO("Linking shader program");
m_ShaderProgramHandle = glCreateProgram(); m_ShaderProgramHandle = glCreateProgram();
for (auto &shader : m_Shaders) { for (auto &shader : m_Shaders) {
@@ -119,10 +118,6 @@ GLuint ShaderProgram::Link()
glLinkProgram(m_ShaderProgramHandle); glLinkProgram(m_ShaderProgramHandle);
if (GLERROR("glLinkProgram")) if (GLERROR("glLinkProgram"))
return 0; return 0;
for (auto &shader : m_Shaders) {
shader.release();
}
m_Shaders.clear(); m_Shaders.clear();
return m_ShaderProgramHandle; return m_ShaderProgramHandle;
@@ -144,9 +139,4 @@ void ShaderProgram::Bind()
void ShaderProgram::Unbind() void ShaderProgram::Unbind()
{ {
glActiveShaderProgram(0, 0); glActiveShaderProgram(0, 0);
} }
void ShaderProgram::Initialize()
{
m_ShaderProgramHandle = 0;
}
+5 -14
View File
@@ -6,11 +6,7 @@
#include <fstream> #include <fstream>
#include <vector> #include <vector>
#define _CRT_SECURE_NO_WARNINGS #include "OpenGL.h"
#include <GL/glew.h>
#define GLFW_INCLUDE_GLU
#include <GLFW/glfw3.h>
#include <glext.h>
#include "glerror.h" #include "glerror.h"
@@ -68,25 +64,20 @@ public:
class ShaderProgram class ShaderProgram
{ {
public: public:
ShaderProgram(); ShaderProgram()
: m_ShaderProgramHandle(0) { }
~ShaderProgram(); ~ShaderProgram();
void AddShader(std::unique_ptr<Shader> shader); void AddShader(std::shared_ptr<Shader> shader);
void Compile(); void Compile();
GLuint Link(); GLuint Link();
GLuint GetHandle(); GLuint GetHandle();
void Bind(); void Bind();
void Unbind(); void Unbind();
private: private:
GLuint m_ShaderProgramHandle; GLuint m_ShaderProgramHandle;
std::vector<std::unique_ptr<Shader>> m_Shaders; std::vector<std::shared_ptr<Shader>> m_Shaders;
void Initialize();
}; };
#endif // ShaderProgram_h__ #endif // ShaderProgram_h__
@@ -0,0 +1,9 @@
#version 430
uniform mat4 MVP;
out vec4 FragmentColor;
void main() {
FragmentColor = vec4(1.0, 1.0, 1.0, 1.0);
}
+34
View File
@@ -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;
}
}
-1
View File
@@ -4,7 +4,6 @@
#include <array> #include <array>
#include "System.h" #include "System.h"
#include "Renderer.h"
#include "Components/Transform.h" #include "Components/Transform.h"
#include "Components/Input.h" #include "Components/Input.h"
#include "logging.h" #include "logging.h"
+2 -1
View File
@@ -1,6 +1,8 @@
#ifndef RenderSystem_h__ #ifndef RenderSystem_h__
#define RenderSystem_h__ #define RenderSystem_h__
#include <unordered_map>
#include "System.h" #include "System.h"
#include "Model.h" #include "Model.h"
#include "Texture.h" #include "Texture.h"
@@ -8,7 +10,6 @@
#include "Components/Transform.h" #include "Components/Transform.h"
#include "Components/Camera.h" #include "Components/Camera.h"
#include "Renderer.h" #include "Renderer.h"
#include <unordered_map>
namespace Systems namespace Systems
{ {
+1 -4
View File
@@ -3,10 +3,7 @@
#include <string> #include <string>
#include <GL/glew.h> #include "OpenGL.h"
#define GLFW_INCLUDE_GLU
#include <GLFW/glfw3.h>
#include <glext.h>
#include <SOIL.h> #include <SOIL.h>
class Texture class Texture
+1
View File
@@ -6,6 +6,7 @@
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
#include <string> #include <string>
#include <queue>
#include <boost/any.hpp> #include <boost/any.hpp>