Fix crash when switching fullscreen stretching modes when fullscreen
This commit is contained in:
@@ -1154,7 +1154,7 @@ static void update_fullscreen_scale_checkboxes(Ui::MainWindow* ui, QAction* sele
|
|||||||
|
|
||||||
if (video_fullscreen > 0) {
|
if (video_fullscreen > 0) {
|
||||||
auto widget = ui->stackedWidget->currentWidget();
|
auto widget = ui->stackedWidget->currentWidget();
|
||||||
auto rc = dynamic_cast<RendererCommon*>(widget);
|
auto rc = ui->stackedWidget->rendererWindow;
|
||||||
rc->onResize(widget->width(), widget->height());
|
rc->onResize(widget->width(), widget->height());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -183,6 +183,7 @@ void RendererStack::switchRenderer(Renderer renderer) {
|
|||||||
case Renderer::Software:
|
case Renderer::Software:
|
||||||
{
|
{
|
||||||
auto sw = new SoftwareRenderer(this);
|
auto sw = new SoftwareRenderer(this);
|
||||||
|
rendererWindow = sw;
|
||||||
connect(this, &RendererStack::blitToRenderer, sw, &SoftwareRenderer::onBlit, Qt::QueuedConnection);
|
connect(this, &RendererStack::blitToRenderer, sw, &SoftwareRenderer::onBlit, Qt::QueuedConnection);
|
||||||
current.reset(this->createWindowContainer(sw, this));
|
current.reset(this->createWindowContainer(sw, this));
|
||||||
}
|
}
|
||||||
@@ -191,6 +192,7 @@ void RendererStack::switchRenderer(Renderer renderer) {
|
|||||||
{
|
{
|
||||||
this->createWinId();
|
this->createWinId();
|
||||||
auto hw = new HardwareRenderer(this);
|
auto hw = new HardwareRenderer(this);
|
||||||
|
rendererWindow = hw;
|
||||||
connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection);
|
connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection);
|
||||||
current.reset(this->createWindowContainer(hw, this));
|
current.reset(this->createWindowContainer(hw, this));
|
||||||
break;
|
break;
|
||||||
@@ -199,6 +201,7 @@ void RendererStack::switchRenderer(Renderer renderer) {
|
|||||||
{
|
{
|
||||||
this->createWinId();
|
this->createWinId();
|
||||||
auto hw = new HardwareRenderer(this, HardwareRenderer::RenderType::OpenGLES);
|
auto hw = new HardwareRenderer(this, HardwareRenderer::RenderType::OpenGLES);
|
||||||
|
rendererWindow = hw;
|
||||||
connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection);
|
connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection);
|
||||||
current.reset(this->createWindowContainer(hw, this));
|
current.reset(this->createWindowContainer(hw, this));
|
||||||
break;
|
break;
|
||||||
@@ -207,6 +210,7 @@ void RendererStack::switchRenderer(Renderer renderer) {
|
|||||||
{
|
{
|
||||||
this->createWinId();
|
this->createWinId();
|
||||||
auto hw = new HardwareRenderer(this, HardwareRenderer::RenderType::OpenGL3);
|
auto hw = new HardwareRenderer(this, HardwareRenderer::RenderType::OpenGL3);
|
||||||
|
rendererWindow = hw;
|
||||||
connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection);
|
connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection);
|
||||||
current.reset(this->createWindowContainer(hw, this));
|
current.reset(this->createWindowContainer(hw, this));
|
||||||
break;
|
break;
|
||||||
|
@@ -13,6 +13,7 @@ namespace Ui {
|
|||||||
class RendererStack;
|
class RendererStack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class RendererCommon;
|
||||||
class RendererStack : public QStackedWidget
|
class RendererStack : public QStackedWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -43,6 +44,7 @@ public:
|
|||||||
};
|
};
|
||||||
void switchRenderer(Renderer renderer);
|
void switchRenderer(Renderer renderer);
|
||||||
|
|
||||||
|
RendererCommon* rendererWindow{nullptr};
|
||||||
signals:
|
signals:
|
||||||
void blitToRenderer(const std::unique_ptr<uint8_t>* img, int, int, int, int, std::atomic_flag* in_use);
|
void blitToRenderer(const std::unique_ptr<uint8_t>* img, int, int, int, int, std::atomic_flag* in_use);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user