diff --git a/Sources/Overload/OvGame/include/OvGame/Core/Context.h b/Sources/Overload/OvGame/include/OvGame/Core/Context.h index a1e197240..d51a598b4 100644 --- a/Sources/Overload/OvGame/include/OvGame/Core/Context.h +++ b/Sources/Overload/OvGame/include/OvGame/Core/Context.h @@ -62,6 +62,7 @@ namespace OvGame::Core std::unique_ptr audioEngine; std::unique_ptr audioPlayer; std::unique_ptr scriptInterpreter; + std::unique_ptr framebuffer; OvCore::SceneSystem::SceneManager sceneManager; diff --git a/Sources/Overload/OvGame/src/OvGame/Core/Context.cpp b/Sources/Overload/OvGame/src/OvGame/Core/Context.cpp index 6b84c95a6..233b09abc 100644 --- a/Sources/Overload/OvGame/src/OvGame/Core/Context.cpp +++ b/Sources/Overload/OvGame/src/OvGame/Core/Context.cpp @@ -94,6 +94,8 @@ OvGame::Core::Context::Context() : /* Scripting */ scriptInterpreter = std::make_unique(projectScriptsPath); + + framebuffer = std::make_unique(windowSettings.width, windowSettings.height); } OvGame::Core::Context::~Context() diff --git a/Sources/Overload/OvGame/src/OvGame/Core/Game.cpp b/Sources/Overload/OvGame/src/OvGame/Core/Game.cpp index 309db90d5..32254019c 100644 --- a/Sources/Overload/OvGame/src/OvGame/Core/Game.cpp +++ b/Sources/Overload/OvGame/src/OvGame/Core/Game.cpp @@ -75,6 +75,7 @@ void RenderCurrentScene( frameDescriptor.renderWidth = windowWidth; frameDescriptor.renderHeight = windowHeight; frameDescriptor.camera = camera->GetCamera(); + frameDescriptor.outputBuffer = *p_context.framebuffer; p_renderer.BeginFrame(frameDescriptor); p_renderer.DrawFrame(); @@ -120,6 +121,9 @@ void OvGame::Core::Game::Update(float p_deltaTime) } RenderCurrentScene(m_sceneRenderer, m_context); + + auto [windowWidth, windowHeight] = m_context.window->GetSize(); + m_context.framebuffer->BlitToBackBuffer(windowWidth, windowHeight); } m_context.sceneManager.Update(); diff --git a/Sources/Overload/OvRendering/include/OvRendering/Buffers/Framebuffer.h b/Sources/Overload/OvRendering/include/OvRendering/Buffers/Framebuffer.h index 9e09d8031..11a1f9dda 100644 --- a/Sources/Overload/OvRendering/include/OvRendering/Buffers/Framebuffer.h +++ b/Sources/Overload/OvRendering/include/OvRendering/Buffers/Framebuffer.h @@ -85,6 +85,13 @@ namespace OvRendering::Buffers */ void GenerateMipMaps() const; + /** + * Blit the framebuffer to the back buffer + * @param p_backBufferWidth + * @param p_backBufferHeight + */ + void BlitToBackBuffer(uint16_t p_backBufferWidth, uint16_t p_backBufferHeight) const; + private: uint16_t m_width = 0; uint16_t m_height = 0; diff --git a/Sources/Overload/OvRendering/src/OvRendering/Buffers/Framebuffer.cpp b/Sources/Overload/OvRendering/src/OvRendering/Buffers/Framebuffer.cpp index 9646265e3..128b5fd9c 100644 --- a/Sources/Overload/OvRendering/src/OvRendering/Buffers/Framebuffer.cpp +++ b/Sources/Overload/OvRendering/src/OvRendering/Buffers/Framebuffer.cpp @@ -151,3 +151,11 @@ void OvRendering::Buffers::Framebuffer::GenerateMipMaps() const glGenerateMipmap(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0); } + +void OvRendering::Buffers::Framebuffer::BlitToBackBuffer(uint16_t p_backBufferWidth, uint16_t p_backBufferHeight) const +{ + glBlitNamedFramebuffer(m_bufferID, 0, + 0, 0, m_width, m_height, + 0, 0, p_backBufferWidth, p_backBufferHeight, + GL_COLOR_BUFFER_BIT, GL_LINEAR); +}