diff --git a/engine/include/engine/renderer/renderer.h b/engine/include/engine/renderer/renderer.h index ead7856..071e86e 100644 --- a/engine/include/engine/renderer/renderer.h +++ b/engine/include/engine/renderer/renderer.h @@ -8,6 +8,8 @@ #include "engine/export.h" #include "engine/components/light.h" +#include "engine/opengl/buffers.h" + namespace Core { // TODO: make static or singleton @@ -26,6 +28,8 @@ private: void GenerateShadowMaps(); void EnsureShadowResources(light& l); private: + OpenGL::UniformBuffer m_uniform_matrices; + Shader m_shader; Shader m_depthShader; diff --git a/engine/src/renderer/renderer.cpp b/engine/src/renderer/renderer.cpp index d0c9fd6..f372075 100644 --- a/engine/src/renderer/renderer.cpp +++ b/engine/src/renderer/renderer.cpp @@ -9,6 +9,7 @@ #include #include +#include #include "engine/renderer/renderer.h" #include "engine/window/window.h" @@ -22,15 +23,9 @@ namespace Core { -Renderer::Renderer(std::shared_ptr scene) : m_scene(scene) +Renderer::Renderer(std::shared_ptr scene) + : m_scene(scene), m_uniform_matrices(2 * sizeof(glm::mat4), 1) { - m_proj = glm::perspective( - static_cast(M_PI_2), - static_cast(Window::GetWidth()) / static_cast(Window::GetHeight()), - 0.01f, - 100.0f - ); - m_shader.init( FileManager::read("./engine/src/shaders/main.vs"), FileManager::read("./engine/src/shaders/pbr.fs") @@ -41,6 +36,18 @@ Renderer::Renderer(std::shared_ptr scene) : m_scene(scene) FileManager::read("./engine/src/shaders/depth.fs") ); + glUniformBlockBinding(m_shader.m_id, glGetUniformBlockIndex(m_shader.m_id, "Matrices"), 1); + // glUniformBlockBinding(m_depthShader.m_id, glGetUniformBlockIndex(m_depthShader.m_id, "Matrices"), 1); + + m_proj = glm::perspective( + static_cast(M_PI_2), + static_cast(Window::GetWidth()) / static_cast(Window::GetHeight()), + 0.01f, + 100.0f + ); + + m_uniform_matrices.SubData(glm::value_ptr(m_proj), sizeof(glm::mat4), 0); + m_model = glm::mat4(1.f); m_shader.use(); @@ -58,6 +65,7 @@ void Renderer::OnWindowResized(int w, int h) { 0.01f, 100.0f ); + m_uniform_matrices.SubData(glm::value_ptr(m_proj), sizeof(glm::mat4), 0); } void Renderer::ApplyLights(Shader &shader) { @@ -119,6 +127,8 @@ void Renderer::UpdateView() { camTransform.position + camTransform.rotation, glm::vec3(0.f, 1.f, 0.f) ); + + m_uniform_matrices.SubData(glm::value_ptr(m_view), sizeof(glm::mat4), sizeof(glm::mat4)); m_shader.setVec3("viewPos", camTransform.position);