diff --git a/src/GUI/WorldFrame.h b/src/GUI/WorldFrame.h index 5aa3746..03b9708 100644 --- a/src/GUI/WorldFrame.h +++ b/src/GUI/WorldFrame.h @@ -123,6 +123,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 1ce74aa..e6aa0ad 100755 --- a/src/Renderer.cpp +++ b/src/Renderer.cpp @@ -514,10 +514,13 @@ void Renderer::ForwardRendering(RenderQueue &rq) auto spriteJob = std::dynamic_pointer_cast(job); if (spriteJob) { - glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(glm::mat4())); - glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(glm::mat4())); - glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "V"), 1, GL_FALSE, glm::value_ptr(glm::mat4())); - glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "P"), 1, GL_FALSE, glm::value_ptr(glm::mat4())); + 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);