Don't block on lost context
When glGetError returns GL_CONTEXT_LOST, on XCB + Nvidia at least, the error does not get cleared until the next successful glGetGraphicsResetStatus. We can't handle this properly until the start of the next frame where we will hopefully have a valid context, but in the meantime we should avoid locking up completely. Change-Id: Id438d44d83b926e1f3e4281ca3704231bf1a23cf Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>bb10
parent
b0479aab29
commit
29778037f8
|
|
@ -55,12 +55,16 @@ QT_BEGIN_NAMESPACE
|
|||
#ifndef QT_NO_DEBUG
|
||||
#define QT_RESET_GLERROR() \
|
||||
{ \
|
||||
while (QOpenGLContext::currentContext()->functions()->glGetError() != GL_NO_ERROR) {} \
|
||||
while (true) {\
|
||||
GLenum error = QOpenGLContext::currentContext()->functions()->glGetError(); \
|
||||
if (error == GL_NO_ERROR || error == GL_CONTEXT_LOST) \
|
||||
break; \
|
||||
} \
|
||||
}
|
||||
#define QT_CHECK_GLERROR() \
|
||||
{ \
|
||||
GLenum err = QOpenGLContext::currentContext()->functions()->glGetError(); \
|
||||
if (err != GL_NO_ERROR) { \
|
||||
if (err != GL_NO_ERROR && err != GL_CONTEXT_LOST) { \
|
||||
qDebug("[%s line %d] OpenGL Error: %d", \
|
||||
__FILE__, __LINE__, (int)err); \
|
||||
} \
|
||||
|
|
@ -126,6 +130,10 @@ QT_BEGIN_NAMESPACE
|
|||
#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
|
||||
#endif
|
||||
|
||||
#ifndef GL_CONTEXT_LOST
|
||||
#define GL_CONTEXT_LOST 0x0507
|
||||
#endif
|
||||
|
||||
|
||||
/*!
|
||||
\class QOpenGLFramebufferObjectFormat
|
||||
|
|
@ -1303,8 +1311,11 @@ static QImage qt_gl_read_framebuffer(const QSize &size, GLenum internal_format,
|
|||
{
|
||||
QOpenGLContext *ctx = QOpenGLContext::currentContext();
|
||||
QOpenGLFunctions *funcs = ctx->functions();
|
||||
while (funcs->glGetError());
|
||||
|
||||
while (true) {
|
||||
GLenum error = funcs->glGetError();
|
||||
if (error == GL_NO_ERROR || error == GL_CONTEXT_LOST)
|
||||
break;
|
||||
}
|
||||
switch (internal_format) {
|
||||
case GL_RGB:
|
||||
case GL_RGB8:
|
||||
|
|
|
|||
Loading…
Reference in New Issue