diff options
Diffstat (limited to 'source/Renderer.cpp')
-rw-r--r-- | source/Renderer.cpp | 18 |
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); |