From 6529b3edf52665f567cabcb4cf6e59efafe2bf30 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Sat, 13 Jun 2015 03:02:04 -0700 Subject: [PATCH] Qt: Make display driver configurable --- src/platform/qt/Display.cpp | 33 +++++++++++++++++++++++++++++++++ src/platform/qt/Display.h | 13 +++++++++++++ src/platform/qt/GBAApp.cpp | 2 ++ src/platform/qt/Window.cpp | 6 ++---- 4 files changed, 50 insertions(+), 4 deletions(-) diff --git a/src/platform/qt/Display.cpp b/src/platform/qt/Display.cpp index 8131627b0..59d218d46 100644 --- a/src/platform/qt/Display.cpp +++ b/src/platform/qt/Display.cpp @@ -5,12 +5,45 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "Display.h" +#include "DisplayGL.h" +#include "DisplayQt.h" + extern "C" { #include "gba/video.h" } using namespace QGBA; +#ifdef BUILD_GL +Display::Driver Display::s_driver = Display::Driver::OPENGL; +#else +Display::Driver Display::s_driver = Display::Driver::QT; +#endif + +Display* Display::create(QWidget* parent) { +#ifdef BUILD_GL + QGLFormat format(QGLFormat(QGL::Rgba | QGL::DoubleBuffer)); + format.setSwapInterval(1); +#endif + + switch (s_driver) { +#ifdef BUILD_GL + case Driver::OPENGL: + return new DisplayGL(format, parent); +#endif + + case Driver::QT: + return new DisplayQt(parent); + + default: +#ifdef BUILD_GL + return new DisplayGL(format, parent); +#else + return new DisplayQt(parent); +#endif + } +} + Display::Display(QWidget* parent) : QWidget(parent) { diff --git a/src/platform/qt/Display.h b/src/platform/qt/Display.h index f98ea594d..c69461f39 100644 --- a/src/platform/qt/Display.h +++ b/src/platform/qt/Display.h @@ -16,8 +16,18 @@ class Display : public QWidget { Q_OBJECT public: + enum class Driver { + QT = 0, +#ifdef BUILD_GL + OPENGL = 1, +#endif + }; + Display(QWidget* parent = nullptr); + static Display* create(QWidget* parent = nullptr); + static void setDriver(Driver driver) { s_driver = driver; } + public slots: virtual void startDrawing(GBAThread* context) = 0; virtual void stopDrawing() = 0; @@ -29,6 +39,9 @@ public slots: virtual void framePosted(const uint32_t*) = 0; virtual void showMessage(const QString& message) = 0; + +private: + static Driver s_driver; }; } diff --git a/src/platform/qt/GBAApp.cpp b/src/platform/qt/GBAApp.cpp index 929dee497..084343b47 100644 --- a/src/platform/qt/GBAApp.cpp +++ b/src/platform/qt/GBAApp.cpp @@ -6,6 +6,7 @@ #include "GBAApp.h" #include "AudioProcessor.h" +#include "Display.h" #include "GameController.h" #include "Window.h" @@ -55,6 +56,7 @@ GBAApp::GBAApp(int& argc, char* argv[]) } freeArguments(&args); + Display::setDriver(static_cast(m_configController.getQtOption("videoDriver").toInt())); AudioProcessor::setDriver(static_cast(m_configController.getQtOption("audioDriver").toInt())); w->controller()->reloadAudioDriver(); diff --git a/src/platform/qt/Window.cpp b/src/platform/qt/Window.cpp index d69b0ff3b..65e2ecd6d 100644 --- a/src/platform/qt/Window.cpp +++ b/src/platform/qt/Window.cpp @@ -15,7 +15,7 @@ #include "CheatsView.h" #include "ConfigController.h" -#include "DisplayGL.h" +#include "Display.h" #include "GameController.h" #include "GBAApp.h" #include "GBAKeyEditor.h" @@ -73,9 +73,7 @@ Window::Window(ConfigController* config, int playerId, QWidget* parent) m_controller->setOverrides(m_config->overrides()); updateTitle(); - QGLFormat format(QGLFormat(QGL::Rgba | QGL::DoubleBuffer)); - format.setSwapInterval(1); - m_display = new DisplayGL(format, this); + m_display = Display::create(this); m_logo.setDevicePixelRatio(m_screenWidget->devicePixelRatio()); m_logo = m_logo; // Free memory left over in old pixmap