aboutsummaryrefslogtreecommitdiff
path: root/source/Renderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Renderer.cpp')
-rw-r--r--source/Renderer.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/source/Renderer.cpp b/source/Renderer.cpp
index 99fc84d..3497449 100644
--- a/source/Renderer.cpp
+++ b/source/Renderer.cpp
@@ -1,6 +1,11 @@
#include "Renderer.hpp"
+#include "GameObject.hpp"
+
#include <cassert>
+#include <glm/gtc/matrix_transform.hpp>
+#include <glm/gtc/quaternion.hpp>
+#include <glm/gtx/quaternion.hpp>
RenderObject::RenderObject()
: mVao{ GL_NONE } {
@@ -102,7 +107,6 @@ void Renderer::BeginFrame(Camera& camera, float currentTime, float deltaTime) {
mFrame.camera = &camera;
mFrame.matrixView = camera.CalcViewMatrix();
mFrame.matrixProj = camera.CalcProjectionMatrix();
- mFrame.matrixCombined = mFrame.matrixProj * mFrame.matrixView;
mFrame.time = currentTime;
mFrame.deltaTime = deltaTime;
}
@@ -112,11 +116,13 @@ void Renderer::EndFrame() {
mInsideFrame = false;
}
-void Renderer::Draw(const RenderObject* objects, size_t count) {
+void Renderer::Draw(const RenderObject* objects, const GameObject* gameObject, size_t count) {
using namespace Tags;
assert(mInsideFrame);
+ auto vpMatrix = mFrame.matrixProj * mFrame.matrixView;
+
// TODO shader grouping
// TODO material grouping
for (size_t i = 0; i < count; ++i) {
@@ -135,7 +141,13 @@ void Renderer::Draw(const RenderObject* objects, size_t count) {
// Autofill uniforms
if (shader->autofill_Transform != kInvalidLocation) {
- glUniformMatrix4fv(shader->autofill_Transform, 1, GL_FALSE, &mFrame.matrixCombined[0][0]);
+ glm::mat4 objectMatrix(1.0f);
+ objectMatrix = glm::translate(objectMatrix, gameObject->GetPos());
+ objectMatrix *= glm::toMat4(gameObject->GetRotation());
+ objectMatrix = glm::scale(objectMatrix, gameObject->GetScale());
+ glm::mat4 transform = vpMatrix * objectMatrix;
+
+ glUniformMatrix4fv(shader->autofill_Transform, 1, GL_FALSE, &transform[0][0]);
}
if (shader->autofill_Time != kInvalidLocation) {
glUniform1f(shader->autofill_Time, mFrame.time);