mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-24 14:49:42 -06:00
Renderer: Handle resize events on-demand instead of polling
We now differentiate between a resize event and surface change/destroyed event, reducing the overhead for resizes in the Vulkan backend. It is also now now safe to change the surface multiple times if the video thread is lagging behind.
This commit is contained in:
@ -51,10 +51,10 @@ void Host::SetRenderFullscreen(bool fullscreen)
|
||||
m_render_fullscreen = fullscreen;
|
||||
}
|
||||
|
||||
void Host::UpdateSurface()
|
||||
void Host::ResizeSurface(int new_width, int new_height)
|
||||
{
|
||||
if (g_renderer)
|
||||
g_renderer->ChangeSurface(GetRenderHandle());
|
||||
g_renderer->ResizeSurface(new_width, new_height);
|
||||
}
|
||||
|
||||
void Host_Message(int id)
|
||||
|
@ -26,7 +26,7 @@ public:
|
||||
void SetRenderHandle(void* handle);
|
||||
void SetRenderFocus(bool focus);
|
||||
void SetRenderFullscreen(bool fullscreen);
|
||||
void UpdateSurface();
|
||||
void ResizeSurface(int new_width, int new_height);
|
||||
|
||||
signals:
|
||||
void RequestTitle(const QString& title);
|
||||
|
@ -22,7 +22,7 @@ RenderWidget::RenderWidget(QWidget* parent) : QWidget(parent)
|
||||
Qt::DirectConnection);
|
||||
connect(this, &RenderWidget::HandleChanged, Host::GetInstance(), &Host::SetRenderHandle,
|
||||
Qt::DirectConnection);
|
||||
connect(this, &RenderWidget::SizeChanged, Host::GetInstance(), &Host::UpdateSurface,
|
||||
connect(this, &RenderWidget::SizeChanged, Host::GetInstance(), &Host::ResizeSurface,
|
||||
Qt::DirectConnection);
|
||||
|
||||
emit HandleChanged((void*)winId());
|
||||
@ -84,8 +84,12 @@ bool RenderWidget::event(QEvent* event)
|
||||
Host::GetInstance()->SetRenderFocus(false);
|
||||
break;
|
||||
case QEvent::Resize:
|
||||
emit SizeChanged();
|
||||
{
|
||||
const QResizeEvent* se = static_cast<QResizeEvent*>(event);
|
||||
QSize new_size = se->size();
|
||||
emit SizeChanged(new_size.width(), new_size.height());
|
||||
break;
|
||||
}
|
||||
case QEvent::WindowStateChange:
|
||||
emit StateChanged(isFullScreen());
|
||||
break;
|
||||
|
@ -23,7 +23,7 @@ signals:
|
||||
void Closed();
|
||||
void HandleChanged(void* handle);
|
||||
void StateChanged(bool fullscreen);
|
||||
void SizeChanged();
|
||||
void SizeChanged(int new_width, int new_height);
|
||||
|
||||
private:
|
||||
void HandleCursorTimer();
|
||||
|
Reference in New Issue
Block a user