diff --git a/include/td/render/Renderer.h b/include/td/render/Renderer.h index 7e2bca9..fa25234 100644 --- a/include/td/render/Renderer.h +++ b/include/td/render/Renderer.h @@ -15,14 +15,14 @@ class BasicRenderer { void Render(const GL::VertexArray& a_Vao); }; +template class Renderer : public BasicRenderer { protected: - std::unique_ptr m_Shader; + std::unique_ptr m_Shader; Camera& m_Camera; public: - Renderer(std::unique_ptr&& a_Shader, Camera& a_Camera); - + Renderer(Camera& a_Camera); virtual ~Renderer() {} }; @@ -34,9 +34,9 @@ class RenderPipeline { RenderPipeline(); ~RenderPipeline() = default; - template + template void AddRenderer(Args&&... args) { - m_Renderers.push_back(std::make_unique(args ...)); + m_Renderers.push_back(std::make_unique(args...)); } void Clear() { @@ -50,5 +50,22 @@ class RenderPipeline { } }; + + + + +template +Renderer::Renderer(Camera& a_Camera) : m_Shader(std::make_unique()), m_Camera(a_Camera) { + a_Camera.OnPerspectiveChange.Connect([this]() { + m_Shader->Start(); + m_Shader->SetProjectionMatrix(m_Camera.GetProjectionMatrix()); + }); + + a_Camera.OnViewChange.Connect([this]() { + m_Shader->Start(); + m_Shader->SetViewMatrix(m_Camera.GetViewMatrix()); + }); +} + } // namespace render } // namespace td diff --git a/include/td/render/renderer/WorldRenderer.h b/include/td/render/renderer/WorldRenderer.h index 095f6be..93dfb8d 100644 --- a/include/td/render/renderer/WorldRenderer.h +++ b/include/td/render/renderer/WorldRenderer.h @@ -8,7 +8,7 @@ namespace td { namespace render { -class WorldRenderer : public Renderer { +class WorldRenderer : public Renderer { private: const game::World& m_World; std::unique_ptr m_WorldVao; diff --git a/include/td/render/shader/ShaderProgram.h b/include/td/render/shader/ShaderProgram.h index 66db83f..93d1f13 100755 --- a/include/td/render/shader/ShaderProgram.h +++ b/include/td/render/shader/ShaderProgram.h @@ -5,11 +5,6 @@ #include namespace td { - -namespace render { -class Renderer; -} // namespace render - namespace shader { class ShaderProgram { diff --git a/src/td/render/Renderer.cpp b/src/td/render/Renderer.cpp index 9c03453..cc5a032 100644 --- a/src/td/render/Renderer.cpp +++ b/src/td/render/Renderer.cpp @@ -12,20 +12,6 @@ void BasicRenderer::Render(const GL::VertexArray& a_Vao) { a_Vao.Unbind(); } -Renderer::Renderer(std::unique_ptr&& a_Shader, Camera& a_Camera) : - m_Shader(std::move(a_Shader)), m_Camera(a_Camera) { - a_Camera.OnPerspectiveChange.Connect([this]() { - m_Shader->Start(); - m_Shader->SetProjectionMatrix(m_Camera.GetProjectionMatrix()); - }); - - a_Camera.OnViewChange.Connect([this]() { - m_Shader->Start(); - m_Shader->SetViewMatrix(m_Camera.GetViewMatrix()); - }); -} - - RenderPipeline::RenderPipeline() { glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); diff --git a/src/td/render/renderer/WorldRenderer.cpp b/src/td/render/renderer/WorldRenderer.cpp index c189111..468aad3 100644 --- a/src/td/render/renderer/WorldRenderer.cpp +++ b/src/td/render/renderer/WorldRenderer.cpp @@ -7,7 +7,7 @@ namespace td { namespace render { -WorldRenderer::WorldRenderer(Camera& a_Camera, const game::World& a_World) : Renderer(std::make_unique(), a_Camera), m_World(a_World) { +WorldRenderer::WorldRenderer(Camera& a_Camera, const game::World& a_World) : Renderer(a_Camera), m_World(a_World) { m_WorldVao = std::make_unique(std::move(WorldLoader::LoadWorldModel(&a_World))); }