mirror of https://github.com/mgba-emu/mgba.git
Qt: Fix forcing 1.x when getting a 2/3 backwards-compatible context
This commit is contained in:
parent
042a77a932
commit
48162e75e7
|
@ -50,14 +50,20 @@ DisplayGL::DisplayGL(const QSurfaceFormat& format, QWidget* parent)
|
||||||
auto version = m_gl->format().version();
|
auto version = m_gl->format().version();
|
||||||
QStringList extensions = QString(reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS))).split(' ');
|
QStringList extensions = QString(reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS))).split(' ');
|
||||||
|
|
||||||
|
int forceVersion = 0;
|
||||||
|
if (format.majorVersion() < 2) {
|
||||||
|
forceVersion = 1;
|
||||||
|
}
|
||||||
|
|
||||||
if ((version == qMakePair(2, 1) && !extensions.contains("GL_ARB_framebuffer_object")) || version == qMakePair(2, 0)) {
|
if ((version == qMakePair(2, 1) && !extensions.contains("GL_ARB_framebuffer_object")) || version == qMakePair(2, 0)) {
|
||||||
QSurfaceFormat newFormat(format);
|
QSurfaceFormat newFormat(format);
|
||||||
newFormat.setVersion(1, 4);
|
newFormat.setVersion(1, 4);
|
||||||
|
forceVersion = 1;
|
||||||
m_gl->setFormat(newFormat);
|
m_gl->setFormat(newFormat);
|
||||||
m_gl->create();
|
m_gl->create();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_painter = new PainterGL(windowHandle(), m_gl);
|
m_painter = new PainterGL(windowHandle(), m_gl, forceVersion);
|
||||||
setUpdatesEnabled(false); // Prevent paint events, which can cause race conditions
|
setUpdatesEnabled(false); // Prevent paint events, which can cause race conditions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,7 +236,7 @@ int DisplayGL::framebufferHandle() {
|
||||||
return m_painter->glTex();
|
return m_painter->glTex();
|
||||||
}
|
}
|
||||||
|
|
||||||
PainterGL::PainterGL(QWindow* surface, QOpenGLContext* parent)
|
PainterGL::PainterGL(QWindow* surface, QOpenGLContext* parent, int forceVersion)
|
||||||
: m_gl(parent)
|
: m_gl(parent)
|
||||||
, m_surface(surface)
|
, m_surface(surface)
|
||||||
{
|
{
|
||||||
|
@ -250,7 +256,7 @@ PainterGL::PainterGL(QWindow* surface, QOpenGLContext* parent)
|
||||||
#ifdef BUILD_GLES2
|
#ifdef BUILD_GLES2
|
||||||
auto version = m_gl->format().version();
|
auto version = m_gl->format().version();
|
||||||
QStringList extensions = QString(reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS))).split(' ');
|
QStringList extensions = QString(reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS))).split(' ');
|
||||||
if ((version == qMakePair(2, 1) && extensions.contains("GL_ARB_framebuffer_object")) || version.first > 2) {
|
if (forceVersion != 1 && ((version == qMakePair(2, 1) && extensions.contains("GL_ARB_framebuffer_object")) || version.first > 2)) {
|
||||||
gl2Backend = static_cast<mGLES2Context*>(malloc(sizeof(mGLES2Context)));
|
gl2Backend = static_cast<mGLES2Context*>(malloc(sizeof(mGLES2Context)));
|
||||||
mGLES2ContextCreate(gl2Backend);
|
mGLES2ContextCreate(gl2Backend);
|
||||||
m_backend = &gl2Backend->d;
|
m_backend = &gl2Backend->d;
|
||||||
|
|
|
@ -77,7 +77,7 @@ class PainterGL : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PainterGL(QWindow* surface, QOpenGLContext* parent);
|
PainterGL(QWindow* surface, QOpenGLContext* parent, int forceVersion = 0);
|
||||||
~PainterGL();
|
~PainterGL();
|
||||||
|
|
||||||
void setContext(std::shared_ptr<CoreController>);
|
void setContext(std::shared_ptr<CoreController>);
|
||||||
|
|
Loading…
Reference in New Issue