Qt: Make display driver configurable

This commit is contained in:
Jeffrey Pfau 2015-06-13 03:02:04 -07:00
parent 87d26d39f9
commit 6529b3edf5
4 changed files with 50 additions and 4 deletions

View File

@ -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)
{

View File

@ -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;
};
}

View File

@ -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<Display::Driver>(m_configController.getQtOption("videoDriver").toInt()));
AudioProcessor::setDriver(static_cast<AudioProcessor::Driver>(m_configController.getQtOption("audioDriver").toInt()));
w->controller()->reloadAudioDriver();

View File

@ -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