diff --git a/Source/Core/VideoBackends/Software/SWRenderer.cpp b/Source/Core/VideoBackends/Software/SWRenderer.cpp index 51433d311f..cde409d321 100644 --- a/Source/Core/VideoBackends/Software/SWRenderer.cpp +++ b/Source/Core/VideoBackends/Software/SWRenderer.cpp @@ -27,7 +27,8 @@ namespace SW { SWRenderer::SWRenderer(std::unique_ptr window) - : ::Renderer(static_cast(MAX_XFB_WIDTH), static_cast(MAX_XFB_HEIGHT), 1.0f, + : ::Renderer(static_cast(std::max(window->GetContext()->GetBackBufferWidth(), 1u)), + static_cast(std::max(window->GetContext()->GetBackBufferHeight(), 1u)), 1.0f, AbstractTextureFormat::RGBA8), m_window(std::move(window)) { @@ -56,6 +57,18 @@ SWRenderer::CreateFramebuffer(AbstractTexture* color_attachment, AbstractTexture static_cast(depth_attachment)); } +void SWRenderer::BindBackbuffer(const ClearColor& clear_color) +{ + // Look for framebuffer resizes + if (!m_surface_resized.TestAndClear()) + return; + + GLContext* context = m_window->GetContext(); + context->Update(); + m_backbuffer_width = context->GetBackBufferWidth(); + m_backbuffer_height = context->GetBackBufferHeight(); +} + class SWShader final : public AbstractShader { public: diff --git a/Source/Core/VideoBackends/Software/SWRenderer.h b/Source/Core/VideoBackends/Software/SWRenderer.h index f2434d92c0..7c47207326 100644 --- a/Source/Core/VideoBackends/Software/SWRenderer.h +++ b/Source/Core/VideoBackends/Software/SWRenderer.h @@ -27,6 +27,8 @@ public: std::unique_ptr CreateFramebuffer(AbstractTexture* color_attachment, AbstractTexture* depth_attachment) override; + void BindBackbuffer(const ClearColor& clear_color = {}) override; + std::unique_ptr CreateShaderFromSource(ShaderStage stage, std::string_view source) override; std::unique_ptr CreateShaderFromBinary(ShaderStage stage, const void* data,