F1: Wireframe, F2: Draw normals

This commit is contained in:
2014-03-11 15:47:02 +01:00
parent 6c6ce62e9a
commit f027773af8
5 changed files with 55 additions and 12 deletions
+23 -4
View File
@@ -2,6 +2,9 @@
Renderer::Renderer() Renderer::Renderer()
{ {
m_VSync = false;
m_DrawNormals = false;
m_DrawWireframe = false;
} }
void Renderer::Initialize() void Renderer::Initialize()
@@ -39,13 +42,16 @@ void Renderer::Initialize()
LOG_ERROR("GLEW: Initialization failed"); LOG_ERROR("GLEW: Initialization failed");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
glEnable(GL_DEPTH_TEST);
// Create Camera // Create Camera
m_Camera = std::make_shared<Camera>(45.f, (float)WIDTH / HEIGHT, 0.01f, 1000.f); m_Camera = std::make_shared<Camera>(45.f, (float)WIDTH / HEIGHT, 0.01f, 1000.f);
m_Camera->Position(glm::vec3(0.0f, 0.0f, 2.f)); m_Camera->Position(glm::vec3(0.0f, 0.0f, 2.f));
glfwSwapInterval(m_VSync);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glEnable(GL_DEPTH_TEST);
LoadContent(); LoadContent();
} }
@@ -54,12 +60,25 @@ void Renderer::Draw(double dt)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1.0f, 1.0f, 0.0f, 1.0f); glClearColor(1.0f, 1.0f, 0.0f, 1.0f);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
#ifdef DEBUG
glDisable(GL_CULL_FACE);
glPolygonMode(GL_BACK, GL_LINE);
#endif
// Draw models
m_ShaderProgram.Bind(); m_ShaderProgram.Bind();
glPolygonMode(GL_FRONT_AND_BACK, m_DrawWireframe ? GL_LINE : GL_FILL);
DrawModels(); DrawModels();
#ifdef DEBUG #ifdef DEBUG
m_ShaderProgramNormals.Bind(); // Debug draw normals
DrawModels(); if (m_DrawNormals) {
m_ShaderProgramNormals.Bind();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
DrawModels();
}
#endif #endif
ModelsToRender.clear(); ModelsToRender.clear();
+8
View File
@@ -53,10 +53,18 @@ public:
GLFWwindow* GetWindow() const { return m_Window; } GLFWwindow* GetWindow() const { return m_Window; }
std::shared_ptr<Camera> GetCamera() const { return m_Camera; } std::shared_ptr<Camera> GetCamera() const { return m_Camera; }
bool DrawNormals() const { return m_DrawNormals; }
void DrawNormals(bool val) { m_DrawNormals = val; }
bool DrawWireframe() const { return m_DrawWireframe; }
void DrawWireframe(bool val) { m_DrawWireframe = val; }
private: private:
GLFWwindow* m_Window; GLFWwindow* m_Window;
GLint m_glVersion[2]; GLint m_glVersion[2];
GLchar* m_glVendor; GLchar* m_glVendor;
bool m_VSync;
bool m_DrawNormals;
bool m_DrawWireframe;
std::shared_ptr<Camera> m_Camera; std::shared_ptr<Camera> m_Camera;
+5 -3
View File
@@ -86,13 +86,14 @@ bool Shader::IsCompiled() const
ShaderProgram::~ShaderProgram() ShaderProgram::~ShaderProgram()
{ {
Unbind(); if (m_ShaderProgramHandle != 0) {
glDeleteProgram(m_ShaderProgramHandle); glDeleteProgram(m_ShaderProgramHandle);
}
} }
void ShaderProgram::AddShader(std::shared_ptr<Shader> shader) void ShaderProgram::AddShader(std::shared_ptr<Shader> shader)
{ {
m_Shaders.push_back(std::move(shader)); m_Shaders.push_back(shader);
} }
void ShaderProgram::Compile() void ShaderProgram::Compile()
@@ -108,6 +109,7 @@ GLuint ShaderProgram::Link()
{ {
if (m_Shaders.size() == 0) { if (m_Shaders.size() == 0) {
LOG_ERROR("Failed to link shader program: No shaders bound"); LOG_ERROR("Failed to link shader program: No shaders bound");
return 0;
} }
LOG_INFO("Linking shader program"); LOG_INFO("Linking shader program");
+14
View File
@@ -24,6 +24,17 @@ void Systems::InputSystem::Update(double dt)
m_LastMouseX = m_Renderer->WIDTH / 2.f; // xpos; m_LastMouseX = m_Renderer->WIDTH / 2.f; // xpos;
m_LastMouseY = m_Renderer->HEIGHT / 2.f; // ypos; m_LastMouseY = m_Renderer->HEIGHT / 2.f; // ypos;
glfwSetCursorPos(m_Renderer->GetWindow(), m_LastMouseX, m_LastMouseY); glfwSetCursorPos(m_Renderer->GetWindow(), m_LastMouseX, m_LastMouseY);
#ifdef DEBUG
// Wireframe
if (m_CurrentKeyState[GLFW_KEY_F1] && !m_LastKeyState[GLFW_KEY_F1]) {
m_Renderer->DrawWireframe(!m_Renderer->DrawWireframe());
}
// Normals
if (m_CurrentKeyState[GLFW_KEY_F2] && !m_LastKeyState[GLFW_KEY_F2]) {
m_Renderer->DrawNormals(!m_Renderer->DrawNormals());
}
#endif
} }
void Systems::InputSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) void Systems::InputSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
@@ -39,3 +50,6 @@ void Systems::InputSystem::UpdateEntity(double dt, EntityID entity, EntityID par
input->dX = m_CurrentMouseDeltaX; input->dX = m_CurrentMouseDeltaX;
input->dY = m_CurrentMouseDeltaY; input->dY = m_CurrentMouseDeltaY;
} }
std::array<int, GLFW_KEY_LAST+1> Systems::InputSystem::m_CurrentKeyState;
std::array<int, GLFW_KEY_LAST+1> Systems::InputSystem::m_LastKeyState;
+3 -3
View File
@@ -21,13 +21,13 @@ public:
private: private:
std::shared_ptr<Renderer> m_Renderer; std::shared_ptr<Renderer> m_Renderer;
static std::array<int, GLFW_KEY_LAST+1> m_CurrentKeyState;
std::array<int, GLFW_KEY_LAST+1> m_CurrentKeyState; static std::array<int, GLFW_KEY_LAST+1> m_LastKeyState;
std::array<int, GLFW_KEY_LAST+1> m_LastKeyState;
std::array<int, GLFW_MOUSE_BUTTON_LAST+1> m_CurrentMouseState; std::array<int, GLFW_MOUSE_BUTTON_LAST+1> m_CurrentMouseState;
std::array<int, GLFW_MOUSE_BUTTON_LAST+1> m_LastMouseState; std::array<int, GLFW_MOUSE_BUTTON_LAST+1> m_LastMouseState;
float m_CurrentMouseDeltaX, m_CurrentMouseDeltaY; float m_CurrentMouseDeltaX, m_CurrentMouseDeltaY;
float m_LastMouseX, m_LastMouseY; float m_LastMouseX, m_LastMouseY;
}; };
} }