From aab0c7b9581a20249cb000ee483946e691f04540 Mon Sep 17 00:00:00 2001 From: Light Date: Fri, 30 Jul 2021 14:40:34 +0430 Subject: [PATCH] CameraComponent, SceneCamera - Added CameraComponent - Added SceneCamera - Renamed the previous Camera to OrthographicCamera - Added Camera - Renderer now takes a Camera* for projection and mat4& for view - Scene::OnRender now takes in an optional Framebuffer to render to - Minor tidying --- Engine/src/Engine/Camera/Camera.cpp | 36 -------------- Engine/src/Engine/Camera/Camera.h | 28 +++-------- .../src/Engine/Camera/OrthographicCamera.cpp | 43 +++++++++++++++++ Engine/src/Engine/Camera/OrthographicCamera.h | 41 ++++++++++++++++ Engine/src/Engine/Camera/SceneCamera.cpp | 33 +++++++++++++ Engine/src/Engine/Camera/SceneCamera.h | 26 ++++++++++ Engine/src/Engine/Graphics/Renderer.cpp | 16 +++---- Engine/src/Engine/Graphics/Renderer.h | 13 +++-- .../RendererPrograms/QuadRendererProgram.h | 2 +- .../RendererPrograms/RendererProgram.h | 2 +- .../RendererPrograms/TextureRendererProgram.h | 2 +- .../Engine/Scene/Components/CameraComponent.h | 28 +++++++++++ .../Components/SpriteRendererComponent.h | 8 ++-- .../Scene/Components/TransformComponent.h | 14 +++--- Engine/src/Engine/Scene/Entity.h | 6 +++ Engine/src/Engine/Scene/Scene.cpp | 47 ++++++++++++++++--- Engine/src/Engine/Scene/Scene.h | 6 ++- Mirror/src/MirrorLayer.h | 45 +++++++----------- 18 files changed, 277 insertions(+), 119 deletions(-) create mode 100644 Engine/src/Engine/Camera/OrthographicCamera.cpp create mode 100644 Engine/src/Engine/Camera/OrthographicCamera.h create mode 100644 Engine/src/Engine/Camera/SceneCamera.cpp create mode 100644 Engine/src/Engine/Camera/SceneCamera.h create mode 100644 Engine/src/Engine/Scene/Components/CameraComponent.h diff --git a/Engine/src/Engine/Camera/Camera.cpp b/Engine/src/Engine/Camera/Camera.cpp index 86c044e..9684e8a 100644 --- a/Engine/src/Engine/Camera/Camera.cpp +++ b/Engine/src/Engine/Camera/Camera.cpp @@ -1,43 +1,7 @@ #include "ltpch.h" #include "Camera.h" -#include -#include - namespace Light { - - Camera::Camera(const glm::vec2& position, float aspectRatio, float zoomLevel, const glm::vec4& clearColor /* = glm::vec4(0.1f, 0.3f, 0.7f, 1.0f) */) - : m_Up(0.0f, 1.0f, 0.0f), - m_Position(position), - m_AspectRatio(aspectRatio), - m_ZoomLevel(zoomLevel), - m_ClearColor(clearColor) - { - } - void Camera::CalculateView() - { - m_View = glm::lookAt(glm::vec3(m_Position, 100.0f), glm::vec3(m_Position, 0.0f), m_Up); - } - - void Camera::CalculateProjection() - { - m_Projection = glm::ortho(-m_ZoomLevel * m_AspectRatio, - +m_ZoomLevel * m_AspectRatio, - -m_ZoomLevel, - +m_ZoomLevel, - FLT_MAX, FLT_MIN); - } - - void Camera::OnResize(const glm::vec2& size) - { - m_AspectRatio = size.x / size.y; - CalculateProjection(); - } - - void Camera::Move(const glm::vec2& position) - { - m_Position += position; - } } \ No newline at end of file diff --git a/Engine/src/Engine/Camera/Camera.h b/Engine/src/Engine/Camera/Camera.h index 6edc8a7..bb812df 100644 --- a/Engine/src/Engine/Camera/Camera.h +++ b/Engine/src/Engine/Camera/Camera.h @@ -9,33 +9,17 @@ namespace Light { class Camera { private: - glm::vec2 m_Position; - float m_AspectRatio; - float m_ZoomLevel; - - const glm::vec3 m_Up; + glm::vec4 m_BackgroundColor = glm::vec4(1.0f, 0.0f, 0.0f, 1.0f); + protected: glm::mat4 m_Projection; - glm::mat4 m_View; - glm::vec4 m_ClearColor; + public: + Camera() = default; - public: - Camera(const glm::vec2& position, float aspectRatio, float zoomLevel, const glm::vec4& clearColor = glm::vec4(0.1f, 0.3f, 0.7f, 1.0f)); + const glm::mat4& GetProjection() const { return m_Projection; } - // CAMERA // - void CalculateView(); - void CalculateProjection(); - - void OnResize(const glm::vec2& size); - - inline const glm::mat4& GetView() const { return m_View; } - inline const glm::mat4& GetProjection() const { return m_Projection; } - - inline const glm::vec4& GetClearColor() const { return m_ClearColor; } - - // CAMERA_CONTROLLER // - void Move(const glm::vec2& position); + const glm::vec4& GetBackgroundColor() const { return m_BackgroundColor; } }; } \ No newline at end of file diff --git a/Engine/src/Engine/Camera/OrthographicCamera.cpp b/Engine/src/Engine/Camera/OrthographicCamera.cpp new file mode 100644 index 0000000..bc85974 --- /dev/null +++ b/Engine/src/Engine/Camera/OrthographicCamera.cpp @@ -0,0 +1,43 @@ +#include "ltpch.h" +#include "OrthographicCamera.h" + +#include +#include + +namespace Light { + + OrthographicCamera::OrthographicCamera(const glm::vec2& position, float aspectRatio, float zoomLevel, const glm::vec4& clearColor /* = glm::vec4(0.1f, 0.3f, 0.7f, 1.0f) */) + : m_Up(0.0f, 1.0f, 0.0f), + m_Position(position), + m_AspectRatio(aspectRatio), + m_ZoomLevel(zoomLevel), + m_ClearColor(clearColor) + { + } + + void OrthographicCamera::CalculateView() + { + m_View = glm::lookAt(glm::vec3(m_Position, 100.0f), glm::vec3(m_Position, 0.0f), m_Up); + } + + void OrthographicCamera::CalculateProjection() + { + m_Projection = glm::ortho(-m_ZoomLevel * m_AspectRatio, + +m_ZoomLevel * m_AspectRatio, + -m_ZoomLevel, + +m_ZoomLevel, + FLT_MAX, FLT_MIN); + } + + void OrthographicCamera::OnResize(const glm::vec2& size) + { + m_AspectRatio = size.x / size.y; + CalculateProjection(); + } + + void OrthographicCamera::Move(const glm::vec2& position) + { + m_Position += position; + } + +} \ No newline at end of file diff --git a/Engine/src/Engine/Camera/OrthographicCamera.h b/Engine/src/Engine/Camera/OrthographicCamera.h new file mode 100644 index 0000000..92055d8 --- /dev/null +++ b/Engine/src/Engine/Camera/OrthographicCamera.h @@ -0,0 +1,41 @@ +#pragma once + +#include "Base/Base.h" + +#include + +namespace Light { + + class OrthographicCamera + { + private: + glm::vec2 m_Position; + float m_AspectRatio; + float m_ZoomLevel; + + const glm::vec3 m_Up; + + glm::mat4 m_Projection; + glm::mat4 m_View; + + glm::vec4 m_ClearColor; + + public: + OrthographicCamera(const glm::vec2& position, float aspectRatio, float zoomLevel, const glm::vec4& clearColor = glm::vec4(0.1f, 0.3f, 0.7f, 1.0f)); + + // CAMERA // + void CalculateView(); + void CalculateProjection(); + + void OnResize(const glm::vec2& size); + + inline const glm::mat4& GetView() const { return m_View; } + inline const glm::mat4& GetProjection() const { return m_Projection; } + + inline const glm::vec4& GetClearColor() const { return m_ClearColor; } + + // CAMERA_CONTROLLER // + void Move(const glm::vec2& position); + }; + +} \ No newline at end of file diff --git a/Engine/src/Engine/Camera/SceneCamera.cpp b/Engine/src/Engine/Camera/SceneCamera.cpp new file mode 100644 index 0000000..75c84c3 --- /dev/null +++ b/Engine/src/Engine/Camera/SceneCamera.cpp @@ -0,0 +1,33 @@ +#include "ltpch.h" +#include "SceneCamera.h" + +#include + +namespace Light { + + SceneCamera::SceneCamera() + : m_OrthoSize(1000.0f), + m_OrthoNearPlane(-1.0f), + m_OrthoFarPlane(1.0f), + m_AspectRatio(16.0f / 9.0f) + { + CalculateProjection(); + } + + void SceneCamera::SetViewportSize(unsigned int width, unsigned int height) + { + m_AspectRatio = width / (float)height; + CalculateProjection(); + } + + void SceneCamera::CalculateProjection() + { + m_Projection = glm::ortho(-m_OrthoSize * 0.5f * m_AspectRatio, + m_OrthoSize * 0.5f * m_AspectRatio, + -m_OrthoSize * 0.5f, + m_OrthoSize * 0.5f, + m_OrthoFarPlane, + m_OrthoNearPlane); + } + +} \ No newline at end of file diff --git a/Engine/src/Engine/Camera/SceneCamera.h b/Engine/src/Engine/Camera/SceneCamera.h new file mode 100644 index 0000000..3640973 --- /dev/null +++ b/Engine/src/Engine/Camera/SceneCamera.h @@ -0,0 +1,26 @@ +#pragma once + +#include "Camera.h" + +#include "Base/Base.h" + +namespace Light { + + class SceneCamera : public Camera + { + private: + float m_OrthoSize; + float m_OrthoNearPlane, m_OrthoFarPlane; + + float m_AspectRatio; + + public: + SceneCamera(); + + void SetViewportSize(unsigned int width, unsigned int height); + + private: + void CalculateProjection(); + }; + +} \ No newline at end of file diff --git a/Engine/src/Engine/Graphics/Renderer.cpp b/Engine/src/Engine/Graphics/Renderer.cpp index 99d571d..439a0ff 100644 --- a/Engine/src/Engine/Graphics/Renderer.cpp +++ b/Engine/src/Engine/Graphics/Renderer.cpp @@ -7,7 +7,7 @@ #include "RenderCommand.h" #include "Texture.h" -#include "Camera/Camera.h" +#include "Camera/SceneCamera.h" #include "Events/WindowEvents.h" @@ -51,20 +51,20 @@ namespace Light { /* tint */ void Renderer::DrawQuadImpl(const glm::vec3& position, const glm::vec2& size, const glm::vec4& tint) { - DrawQuadFinal(glm::translate(glm::mat4(1.0f), position) * glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f }), + DrawQuad(glm::translate(glm::mat4(1.0f), position) * glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f }), tint); } /* texture */ void Renderer::DrawQuadImpl(const glm::vec3& position, const glm::vec2& size, Ref texture) { - DrawQuadFinal(glm::translate(glm::mat4(1.0f), position) * glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f }), + DrawQuad(glm::translate(glm::mat4(1.0f), position) * glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f }), texture); } //======================================== DRAW_QUAD ========================================// //==================== DRAW_QUAD_TINT ====================// - void Renderer::DrawQuadFinal(const glm::mat4& transform, const glm::vec4& tint) + void Renderer::DrawQuadImpl(const glm::mat4& transform, const glm::vec4& tint) { // locals QuadRendererProgram::QuadVertexData* bufferMap = m_QuadRenderer.GetMapCurrent(); @@ -95,7 +95,7 @@ namespace Light { //==================== DRAW_QUAD_TINT ====================// //==================== DRAW_QUAD_TEXTURE ====================// - void Renderer::DrawQuadFinal(const glm::mat4& transform, Ref texture) + void Renderer::DrawQuadImpl(const glm::mat4& transform, Ref texture) { // #todo: implement a proper binding texture->Bind(); @@ -136,10 +136,10 @@ namespace Light { void Renderer::EndFrame() { m_RenderCommand->SwapBuffers(); - m_RenderCommand->ClearBackBuffer(m_Camera->GetClearColor()); + m_RenderCommand->ClearBackBuffer(m_Camera->GetBackgroundColor()); } - void Renderer::BeginSceneImpl(const Ref& camera, const Ref& targetFrameBuffer /* = nullptr */) + void Renderer::BeginSceneImpl(Camera* camera, const glm::mat4& cameraTransform, const Ref& targetFrameBuffer /* = nullptr */) { // determine the target frame buffer m_TargetFramebuffer = targetFrameBuffer; @@ -152,7 +152,7 @@ namespace Light { // update view projection buffer m_Camera = camera; glm::mat4* map = (glm::mat4*)m_ViewProjectionBuffer->Map(); - map[0] = m_Camera->GetProjection() * m_Camera->GetView(); + map[0] = m_Camera->GetProjection() * glm::inverse(cameraTransform); m_ViewProjectionBuffer->UnMap(); // map renderers diff --git a/Engine/src/Engine/Graphics/Renderer.h b/Engine/src/Engine/Graphics/Renderer.h index d9aa062..442d2d0 100644 --- a/Engine/src/Engine/Graphics/Renderer.h +++ b/Engine/src/Engine/Graphics/Renderer.h @@ -39,7 +39,7 @@ namespace Light { Scope m_RenderCommand; Scope m_Blender; - Ref m_Camera; + Camera* m_Camera; Ref m_TargetFramebuffer; public: @@ -48,7 +48,10 @@ namespace Light { static inline void DrawQuad(const glm::vec3& position, const glm::vec2& size, const glm::vec4& tint) { s_Context->DrawQuadImpl(position, size, tint); } static inline void DrawQuad(const glm::vec3& position, const glm::vec2& size, Ref texture) { s_Context->DrawQuadImpl(position, size, texture); } - static inline void BeginScene(const Ref& camera, const Ref& targetFrameBuffer = nullptr) { s_Context->BeginSceneImpl(camera, targetFrameBuffer); } + static void DrawQuad(const glm::mat4& transform, const glm::vec4& tint) { s_Context->DrawQuadImpl(transform, tint); } + static void DrawQuad(const glm::mat4& transform, Ref texture) { s_Context->DrawQuadImpl(transform, texture); } + + static inline void BeginScene(Camera* camera, const glm::mat4& cameraTransform, const Ref& targetFrameBuffer = nullptr) { s_Context->BeginSceneImpl(camera, cameraTransform, targetFrameBuffer); } static inline void EndScene() { s_Context->EndSceneImpl(); } void OnWindowResize(const WindowResizedEvent& event); @@ -62,10 +65,10 @@ namespace Light { void DrawQuadImpl(const glm::vec3& position, const glm::vec2& size, const glm::vec4& tint); void DrawQuadImpl(const glm::vec3& position, const glm::vec2& size, Ref texture); - void DrawQuadFinal(const glm::mat4& transform, const glm::vec4& tint); - void DrawQuadFinal(const glm::mat4& transform, Ref texture); + void DrawQuadImpl(const glm::mat4& transform, const glm::vec4& tint); + void DrawQuadImpl(const glm::mat4& transform, Ref texture); - void BeginSceneImpl(const Ref& camera, const Ref& targetFrameBuffer = nullptr); + void BeginSceneImpl(Camera* camera, const glm::mat4& cameraTransform, const Ref& targetFrameBuffer = nullptr); void FlushScene(); void EndSceneImpl(); }; diff --git a/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.h b/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.h index 8ebe4de..6358bc0 100644 --- a/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.h +++ b/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.h @@ -13,7 +13,7 @@ namespace Light { class IndexBuffer; class VertexLayout; - class Camera; + class OrthographicCamera; class SharedContext; diff --git a/Engine/src/Engine/Graphics/RendererPrograms/RendererProgram.h b/Engine/src/Engine/Graphics/RendererPrograms/RendererProgram.h index cee4fdd..b228c1f 100644 --- a/Engine/src/Engine/Graphics/RendererPrograms/RendererProgram.h +++ b/Engine/src/Engine/Graphics/RendererPrograms/RendererProgram.h @@ -4,7 +4,7 @@ namespace Light { - class Camera; + class OrthographicCamera; class RendererProgram { diff --git a/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.h b/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.h index 2f21bff..64c6e5d 100644 --- a/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.h +++ b/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.h @@ -13,7 +13,7 @@ namespace Light { class IndexBuffer; class VertexLayout; - class Camera; + class OrthographicCamera; class SharedContext; diff --git a/Engine/src/Engine/Scene/Components/CameraComponent.h b/Engine/src/Engine/Scene/Components/CameraComponent.h new file mode 100644 index 0000000..5b57390 --- /dev/null +++ b/Engine/src/Engine/Scene/Components/CameraComponent.h @@ -0,0 +1,28 @@ +#pragma once + +#include "Base/Base.h" + +#include "Camera/SceneCamera.h" + +#include + +namespace Light { + + struct CameraComponent + { + SceneCamera camera; + bool isPrimary; + + CameraComponent() = default; + CameraComponent(const CameraComponent&) = default; + + CameraComponent(SceneCamera _camera, bool _isPrimary = false) + : camera(_camera), + isPrimary(_isPrimary) + { + } + + operator SceneCamera() { return camera; } + }; + +} \ No newline at end of file diff --git a/Engine/src/Engine/Scene/Components/SpriteRendererComponent.h b/Engine/src/Engine/Scene/Components/SpriteRendererComponent.h index 794895a..8cc828b 100644 --- a/Engine/src/Engine/Scene/Components/SpriteRendererComponent.h +++ b/Engine/src/Engine/Scene/Components/SpriteRendererComponent.h @@ -2,8 +2,6 @@ #include "Base/Base.h" -#include - namespace Light { class Texture; @@ -14,7 +12,11 @@ namespace Light { SpriteRendererComponent() = default; SpriteRendererComponent(const SpriteRendererComponent&) = default; - SpriteRendererComponent(Ref _texture) : texture(_texture) {} + + SpriteRendererComponent(Ref _texture) + : texture(_texture) + { + } operator Ref() { return texture; } }; diff --git a/Engine/src/Engine/Scene/Components/TransformComponent.h b/Engine/src/Engine/Scene/Components/TransformComponent.h index 76b0cd8..538a2d9 100644 --- a/Engine/src/Engine/Scene/Components/TransformComponent.h +++ b/Engine/src/Engine/Scene/Components/TransformComponent.h @@ -8,16 +8,18 @@ namespace Light { struct TransformComponent { - glm::vec2 position, size; - - // glm::mat4 transform{ 1.0f }; + glm::mat4 transform; TransformComponent() = default; TransformComponent(const TransformComponent&) = default; - TransformComponent(const glm::vec2& _position, const glm::vec2& _size) : position(_position), size(_size) {} - // operator glm::mat4&() { return transform; } - // operator const glm::mat4& () const { return transform; } + TransformComponent(const glm::mat4& _transform) + : transform(_transform) + { + } + + operator glm::mat4&() { return transform; } + operator const glm::mat4& () const { return transform; } }; } \ No newline at end of file diff --git a/Engine/src/Engine/Scene/Entity.h b/Engine/src/Engine/Scene/Entity.h index 87a483f..41284fa 100644 --- a/Engine/src/Engine/Scene/Entity.h +++ b/Engine/src/Engine/Scene/Entity.h @@ -23,6 +23,12 @@ namespace Light { { return m_Scene->m_Registry.emplace(m_Handle, std::forward(args)...); } + + template + T& GetComponent() + { + return m_Scene->m_Registry.get(m_Handle); + } }; } \ No newline at end of file diff --git a/Engine/src/Engine/Scene/Scene.cpp b/Engine/src/Engine/Scene/Scene.cpp index 9dfa6b5..d75b5dd 100644 --- a/Engine/src/Engine/Scene/Scene.cpp +++ b/Engine/src/Engine/Scene/Scene.cpp @@ -19,19 +19,52 @@ namespace Light { { } - void Scene::OnRender() + void Scene::OnRender(const Ref& targetFrameBuffer /* = nullptr */) { - auto group = m_Registry.group(entt::get); + Camera* sceneCamera = nullptr; + glm::mat4* sceneCameraTransform; - group.each([](auto& transform, auto& sprite) { - Renderer::DrawQuad(glm::vec3(transform.position, 0.0f), transform.size, sprite.texture); - }); + /* scene camera */ + { + auto group = m_Registry.group(entt::get); + + for (auto& entity : group) + { + auto& [transformComp, cameraComp] = group.get(entity); + + if (cameraComp.isPrimary) + { + sceneCamera = &cameraComp.camera; + sceneCameraTransform = &transformComp.transform; + } + } + } + + /* draw quads */ + { + + if (sceneCamera) + { + Renderer::BeginScene(sceneCamera, *sceneCameraTransform, targetFrameBuffer); + + auto group = m_Registry.group(entt::get); + + for (auto& entity : group) + { + auto& [transformComp, spriteRendererComp] = group.get(entity); + Renderer::DrawQuad(transformComp.transform, spriteRendererComp.texture); + } + + Renderer::EndScene(); + } + + } } - Entity Scene::CreateEntity(const std::string& name, const glm::vec2& position, const glm::vec2& size) + Entity Scene::CreateEntity(const std::string& name, const glm::mat4& transform) { Entity entity { m_Registry.create(), this } ; - entity.AddComponent(position, size); + entity.AddComponent(transform); return entity; } diff --git a/Engine/src/Engine/Scene/Scene.h b/Engine/src/Engine/Scene/Scene.h index 9cbb327..df7f549 100644 --- a/Engine/src/Engine/Scene/Scene.h +++ b/Engine/src/Engine/Scene/Scene.h @@ -10,6 +10,8 @@ namespace Light { class Entity; + class Framebuffer; + class Scene { private: @@ -20,9 +22,9 @@ namespace Light { Scene(); ~Scene(); - void OnRender(); + void OnRender(const Ref& targetFrameBuffer = nullptr); - Entity CreateEntity(const std::string& name, const glm::vec2& position, const glm::vec2& size); + Entity CreateEntity(const std::string& name, const glm::mat4& transform); }; } \ No newline at end of file diff --git a/Mirror/src/MirrorLayer.h b/Mirror/src/MirrorLayer.h index 24fabcf..76b5288 100644 --- a/Mirror/src/MirrorLayer.h +++ b/Mirror/src/MirrorLayer.h @@ -1,67 +1,54 @@ #include +#include + namespace Light { class MirrorLayer : public Layer { private: - std::shared_ptr m_AwesomefaceTexture; - - std::vector positions; - std::vector sizes; + Ref m_AwesomefaceTexture; glm::vec2 m_Direction; float m_Speed = 1000.0f; - Ref m_Camera; - Ref m_Framebuffer; Scene m_Scene; - - Entity m_TestEntity; - - bool m_GameSceneEvents = false; + Entity m_CameraEntity; public: MirrorLayer(const std::string& name) : Layer(name), m_Direction(glm::vec2(0.0f, 0.0f)) { - m_Camera = std::make_shared(glm::vec2(500.0f), NULL, 1000.0f); - ResourceManager::LoadTexture("awesomeface", "res/Textures/awesomeface.png"); m_AwesomefaceTexture = ResourceManager::GetTexture("awesomeface"); m_Framebuffer = std::shared_ptr(Framebuffer::Create({ 800u, 600u, 1, glm::vec4(1.0f, 0.0f, 0.0f, 1.0f) }, GraphicsContext::GetSharedContext())); + m_CameraEntity = m_Scene.CreateEntity("camera", glm::mat4(1.0f)); + m_CameraEntity.AddComponent(SceneCamera(), true); + for (int i = 0; i < 250; i++) { glm::vec3 position = glm::vec3(rand() % 3000 - 1400.0f, rand() % 3000 - 1400.0f, 0.0f); glm::vec2 size = glm::vec2(250.0f, 250.0f); - positions.push_back(position); - sizes.push_back(size); - - m_Scene.CreateEntity("quad", position, size).AddComponent(m_AwesomefaceTexture); + m_Scene.CreateEntity("quad", glm::translate(glm::mat4(1.0f), { position.x, position.y, 0.0f }) * + glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f})).AddComponent(m_AwesomefaceTexture); } } void OnRender() override { - m_Camera->CalculateProjection(); - m_Camera->CalculateView(); - - Renderer::BeginScene(m_Camera, m_Framebuffer); - - m_Scene.OnRender(); - - Renderer::EndScene(); + m_Scene.OnRender(m_Framebuffer); } void OnUserInterfaceUpdate() { if (ImGui::Begin("GameView")) { + // #todo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Input::ReceiveGameEvents(ImGui::IsWindowFocused()); static ImVec2 regionAvailPrev = { 0, 0 }; @@ -70,7 +57,10 @@ namespace Light { if (regionAvail.x != regionAvailPrev.x || regionAvail.y != regionAvailPrev.y) { m_Framebuffer->Resize({ regionAvail.x, regionAvail.y }); - m_Camera->OnResize({ regionAvail.x, regionAvail.y }); + + auto& cameraComp = m_CameraEntity.GetComponent(); + cameraComp.camera.SetViewportSize(regionAvail.x, regionAvail.y); + regionAvailPrev = regionAvail; } @@ -98,8 +88,9 @@ namespace Light { m_Direction.y = -1.0f; else m_Direction.y = 0.0f; - - m_Camera->Move(m_Direction * m_Speed * deltaTime); + + auto& transform = m_CameraEntity.GetComponent(); + transform = glm::translate(transform.transform, glm::vec3(m_Direction * m_Speed * deltaTime, 0.0)); } };