From 6c8fff9ed0c5bc3d190d99097c037401001b7b10 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Fri, 30 May 2014 22:00:20 +0200 Subject: [PATCH] Non-retardedly slow sprite rendering --- src/GUI/WorldFrame.h | 2 ++ src/RenderQueue.h | 10 ++++++++++ src/Renderer.cpp | 15 +++++++++------ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/GUI/WorldFrame.h b/src/GUI/WorldFrame.h index a0c76e8..5b86204 100644 --- a/src/GUI/WorldFrame.h +++ b/src/GUI/WorldFrame.h @@ -120,6 +120,8 @@ public: ); } } + + RenderQueue.Sort(); } protected: diff --git a/src/RenderQueue.h b/src/RenderQueue.h index 69eed26..932dd69 100644 --- a/src/RenderQueue.h +++ b/src/RenderQueue.h @@ -83,6 +83,10 @@ public: { job.CalculateHash(); m_Jobs.push_front(std::shared_ptr(new T(job))); + } + + void Sort() + { m_Jobs.sort(); } @@ -115,6 +119,12 @@ struct RenderQueuePair Deferred.Clear(); Forward.Clear(); } + + void Sort() + { + Deferred.Sort(); + Forward.Sort(); + } }; #endif // RenderQueue_h__ diff --git a/src/Renderer.cpp b/src/Renderer.cpp index 1476306..31f714a 100755 --- a/src/Renderer.cpp +++ b/src/Renderer.cpp @@ -490,7 +490,7 @@ void Renderer::ForwardRendering(RenderQueue &rq) glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix)); glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "V"), 1, GL_FALSE, glm::value_ptr(m_Camera->ViewMatrix())); glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "P"), 1, GL_FALSE, glm::value_ptr(cameraProjection)); - glUniform4fv(glGetUniformLocation(m_ForwardRendering.GetHandle(), "Color"), 1, glm::value_ptr(modelJob->Color)); + glUniform4fv(glGetUniformLocation(ShaderProgramHandle, "Color"), 1, glm::value_ptr(modelJob->Color)); glBindVertexArray(modelJob->VAO); @@ -514,11 +514,14 @@ void Renderer::ForwardRendering(RenderQueue &rq) auto spriteJob = std::dynamic_pointer_cast(job); if (spriteJob) { - glUniformMatrix4fv(glGetUniformLocation(m_ForwardRendering.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(glm::mat4())); - glUniformMatrix4fv(glGetUniformLocation(m_ForwardRendering.GetHandle(), "M"), 1, GL_FALSE, glm::value_ptr(glm::mat4())); - glUniformMatrix4fv(glGetUniformLocation(m_ForwardRendering.GetHandle(), "V"), 1, GL_FALSE, glm::value_ptr(glm::mat4())); - glUniformMatrix4fv(glGetUniformLocation(m_ForwardRendering.GetHandle(), "P"), 1, GL_FALSE, glm::value_ptr(glm::mat4())); - glUniform4fv(glGetUniformLocation(m_ForwardRendering.GetHandle(), "Color"), 1, glm::value_ptr(spriteJob->Color)); + glm::mat4 modelMatrix = spriteJob->ModelMatrix; + MVP = cameraMatrix * modelMatrix; + + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(glm::mat4(MVP))); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(glm::mat4(modelMatrix))); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "V"), 1, GL_FALSE, glm::value_ptr(glm::mat4(m_Camera->ViewMatrix()))); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "P"), 1, GL_FALSE, glm::value_ptr(glm::mat4(cameraProjection))); + glUniform4fv(glGetUniformLocation(ShaderProgramHandle, "Color"), 1, glm::value_ptr(spriteJob->Color)); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, spriteJob->Texture);