summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/RenderBase.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@users.noreply.github.com>2018-02-20 01:19:45 +1000
committerGitHub <noreply@github.com>2018-02-20 01:19:45 +1000
commit93c502fef8980bf6f6db7316738857bb0818debf (patch)
tree7e14390a62a600c8ec89ad39a77919748d6152f1 /Source/Core/VideoCommon/RenderBase.cpp
parent456c2f42c350e15402eea169a2cc87878327c1fc (diff)
parent0dddaf9d7d0837a574c6e8d255bebb3947f09a0e (diff)
Merge pull request #6330 from stenzek/resizing
Improve handling of surface change/resize events in graphics backends
Diffstat (limited to 'Source/Core/VideoCommon/RenderBase.cpp')
-rw-r--r--Source/Core/VideoCommon/RenderBase.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp
index 9179fe0fa6..1f0da14269 100644
--- a/Source/Core/VideoCommon/RenderBase.cpp
+++ b/Source/Core/VideoCommon/RenderBase.cpp
@@ -400,6 +400,21 @@ bool Renderer::IsHeadless() const
return !m_surface_handle;
}
+void Renderer::ChangeSurface(void* new_surface_handle)
+{
+ std::lock_guard<std::mutex> lock(m_swap_mutex);
+ m_new_surface_handle = new_surface_handle;
+ m_surface_changed.Set();
+}
+
+void Renderer::ResizeSurface(int new_width, int new_height)
+{
+ std::lock_guard<std::mutex> lock(m_swap_mutex);
+ m_new_backbuffer_width = new_width;
+ m_new_backbuffer_height = new_height;
+ m_surface_resized.Set();
+}
+
std::tuple<float, float> Renderer::ScaleToDisplayAspectRatio(const int width,
const int height) const
{
@@ -651,7 +666,10 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, const
m_last_xfb_region = xfb_rect;
// TODO: merge more generic parts into VideoCommon
- g_renderer->SwapImpl(xfb_entry->texture.get(), xfb_rect, ticks, xfb_entry->gamma);
+ {
+ std::lock_guard<std::mutex> guard(m_swap_mutex);
+ g_renderer->SwapImpl(xfb_entry->texture.get(), xfb_rect, ticks, xfb_entry->gamma);
+ }
// Update the window size based on the frame that was just rendered.
// Due to depending on guest state, we need to call this every frame.