diff options
Diffstat (limited to 'src/yuzu')
| -rw-r--r-- | src/yuzu/bootmanager.cpp | 18 | ||||
| -rw-r--r-- | src/yuzu/bootmanager.h | 1 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics.cpp | 5 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics.ui | 5 | ||||
| -rw-r--r-- | src/yuzu/main.cpp | 52 | ||||
| -rw-r--r-- | src/yuzu/main.h | 2 | 
6 files changed, 58 insertions, 25 deletions
| diff --git a/src/yuzu/bootmanager.cpp b/src/yuzu/bootmanager.cpp index c934069dd..f140e951f 100644 --- a/src/yuzu/bootmanager.cpp +++ b/src/yuzu/bootmanager.cpp @@ -237,8 +237,7 @@ private:      GRenderWindow* render_window;  }; -class OpenGLRenderWidget : public RenderWidget { -public: +struct OpenGLRenderWidget : public RenderWidget {      explicit OpenGLRenderWidget(GRenderWindow* parent) : RenderWidget(parent) {          windowHandle()->setSurfaceType(QWindow::OpenGLSurface);      } @@ -251,13 +250,16 @@ private:      std::unique_ptr<Core::Frontend::GraphicsContext> context;  }; -class VulkanRenderWidget : public RenderWidget { -public: +struct VulkanRenderWidget : public RenderWidget {      explicit VulkanRenderWidget(GRenderWindow* parent) : RenderWidget(parent) {          windowHandle()->setSurfaceType(QWindow::VulkanSurface);      }  }; +struct NullRenderWidget : public RenderWidget { +    explicit NullRenderWidget(GRenderWindow* parent) : RenderWidget(parent) {} +}; +  static Core::Frontend::WindowSystemType GetWindowSystemType() {      // Determine WSI type based on Qt platform.      QString platform_name = QGuiApplication::platformName(); @@ -874,6 +876,9 @@ bool GRenderWindow::InitRenderTarget() {              return false;          }          break; +    case Settings::RendererBackend::Null: +        InitializeNull(); +        break;      }      // Update the Window System information with the new render target @@ -970,6 +975,11 @@ bool GRenderWindow::InitializeVulkan() {      return true;  } +void GRenderWindow::InitializeNull() { +    child_widget = new NullRenderWidget(this); +    main_context = std::make_unique<DummyContext>(); +} +  bool GRenderWindow::LoadOpenGL() {      auto context = CreateSharedContext();      auto scope = context->Acquire(); diff --git a/src/yuzu/bootmanager.h b/src/yuzu/bootmanager.h index 4a01481cd..2e19a879e 100644 --- a/src/yuzu/bootmanager.h +++ b/src/yuzu/bootmanager.h @@ -218,6 +218,7 @@ private:      bool InitializeOpenGL();      bool InitializeVulkan(); +    void InitializeNull();      bool LoadOpenGL();      QStringList GetUnsupportedGLExtensions() const; diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp index f1385e972..4a875f86a 100644 --- a/src/yuzu/configuration/configure_graphics.cpp +++ b/src/yuzu/configuration/configure_graphics.cpp @@ -260,6 +260,7 @@ void ConfigureGraphics::ApplyConfiguration() {              Settings::values.renderer_backend.SetValue(GetCurrentGraphicsBackend());              switch (GetCurrentGraphicsBackend()) {              case Settings::RendererBackend::OpenGL: +            case Settings::RendererBackend::Null:                  Settings::values.shader_backend.SetGlobal(false);                  Settings::values.vulkan_device.SetGlobal(true);                  Settings::values.shader_backend.SetValue(shader_backend); @@ -348,6 +349,10 @@ void ConfigureGraphics::UpdateAPILayout() {          ui->device_widget->setVisible(true);          ui->backend_widget->setVisible(false);          break; +    case Settings::RendererBackend::Null: +        ui->device_widget->setVisible(false); +        ui->backend_widget->setVisible(false); +        break;      }  } diff --git a/src/yuzu/configuration/configure_graphics.ui b/src/yuzu/configuration/configure_graphics.ui index 37271f956..f78396690 100644 --- a/src/yuzu/configuration/configure_graphics.ui +++ b/src/yuzu/configuration/configure_graphics.ui @@ -139,6 +139,11 @@                    <string notr="true">Vulkan</string>                   </property>                  </item> +                <item> +                 <property name="text"> +                  <string>None</string> +                 </property> +                </item>                 </widget>                </item>               </layout> diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 2aae746f0..be13024c6 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -1007,29 +1007,11 @@ void GMainWindow::InitializeWidgets() {      renderer_status_button->setObjectName(QStringLiteral("RendererStatusBarButton"));      renderer_status_button->setCheckable(true);      renderer_status_button->setFocusPolicy(Qt::NoFocus); -    connect(renderer_status_button, &QPushButton::toggled, [this](bool checked) { -        renderer_status_button->setText(checked ? tr("VULKAN") : tr("OPENGL")); -    }); -    renderer_status_button->toggle(); - +    connect(renderer_status_button, &QPushButton::clicked, this, &GMainWindow::OnToggleGraphicsAPI); +    UpdateAPIText(); +    renderer_status_button->setCheckable(true);      renderer_status_button->setChecked(Settings::values.renderer_backend.GetValue() ==                                         Settings::RendererBackend::Vulkan); -    connect(renderer_status_button, &QPushButton::clicked, [this] { -        if (emulation_running) { -            return; -        } -        if (renderer_status_button->isChecked()) { -            Settings::values.renderer_backend.SetValue(Settings::RendererBackend::Vulkan); -        } else { -            Settings::values.renderer_backend.SetValue(Settings::RendererBackend::OpenGL); -            if (Settings::values.scaling_filter.GetValue() == Settings::ScalingFilter::Fsr) { -                Settings::values.scaling_filter.SetValue(Settings::ScalingFilter::NearestNeighbor); -                UpdateFilterText(); -            } -        } - -        system->ApplySettings(); -    });      statusBar()->insertPermanentWidget(0, renderer_status_button);      statusBar()->setVisible(true); @@ -3248,6 +3230,18 @@ void GMainWindow::OnToggleAdaptingFilter() {      UpdateFilterText();  } +void GMainWindow::OnToggleGraphicsAPI() { +    auto api = Settings::values.renderer_backend.GetValue(); +    if (api == Settings::RendererBackend::OpenGL) { +        api = Settings::RendererBackend::Vulkan; +    } else { +        api = Settings::RendererBackend::OpenGL; +    } +    Settings::values.renderer_backend.SetValue(api); +    renderer_status_button->setChecked(api == Settings::RendererBackend::Vulkan); +    UpdateAPIText(); +} +  void GMainWindow::OnConfigurePerGame() {      const u64 title_id = system->GetCurrentProcessProgramID();      OpenPerGameConfiguration(title_id, current_game_path.toStdString()); @@ -3568,6 +3562,21 @@ void GMainWindow::UpdateDockedButton() {      dock_status_button->setText(is_docked ? tr("DOCKED") : tr("HANDHELD"));  } +void GMainWindow::UpdateAPIText() { +    const auto api = Settings::values.renderer_backend.GetValue(); +    switch (api) { +    case Settings::RendererBackend::OpenGL: +        renderer_status_button->setText(tr("OPENGL")); +        break; +    case Settings::RendererBackend::Vulkan: +        renderer_status_button->setText(tr("VULKAN")); +        break; +    case Settings::RendererBackend::Null: +        renderer_status_button->setText(tr("NULL")); +        break; +    } +} +  void GMainWindow::UpdateFilterText() {      const auto filter = Settings::values.scaling_filter.GetValue();      switch (filter) { @@ -3613,6 +3622,7 @@ void GMainWindow::UpdateAAText() {  void GMainWindow::UpdateStatusButtons() {      renderer_status_button->setChecked(Settings::values.renderer_backend.GetValue() ==                                         Settings::RendererBackend::Vulkan); +    UpdateAPIText();      UpdateGPUAccuracyButton();      UpdateDockedButton();      UpdateFilterText(); diff --git a/src/yuzu/main.h b/src/yuzu/main.h index 6a9992d05..af6fcec3c 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -307,6 +307,7 @@ private slots:      void OnTasStartStop();      void OnTasRecord();      void OnTasReset(); +    void OnToggleGraphicsAPI();      void OnToggleDockedMode();      void OnToggleGpuAccuracy();      void OnToggleAdaptingFilter(); @@ -347,6 +348,7 @@ private:      void UpdateWindowTitle(std::string_view title_name = {}, std::string_view title_version = {},                             std::string_view gpu_vendor = {});      void UpdateDockedButton(); +    void UpdateAPIText();      void UpdateFilterText();      void UpdateAAText();      void UpdateStatusBar(); | 
