Skip to content

Commit

Permalink
Avoid querying unknown RESET_NOTIFICATION_STRATEGY value on GL < 4.0
Browse files Browse the repository at this point in the history
Fixes: QTBUG-55759
Change-Id: Ie2758859a6862a214691a5011761bf549a31a93e
Reviewed-by: Christian Strømme <[email protected]>
  • Loading branch information
alpqr committed Aug 14, 2019
1 parent 3d56572 commit 1be4f6c
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 9 deletions.
11 changes: 7 additions & 4 deletions src/plugins/platforms/windows/qwindowsglcontext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -876,10 +876,6 @@ QWindowsOpenGLContextFormat QWindowsOpenGLContextFormat::current()
result.options |= QSurfaceFormat::DeprecatedFunctions;
if (value & GL_CONTEXT_FLAG_DEBUG_BIT)
result.options |= QSurfaceFormat::DebugContext;
value = 0;
QOpenGLStaticContext::opengl32.glGetIntegerv(RESET_NOTIFICATION_STRATEGY_ARB, &value);
if (value == LOSE_CONTEXT_ON_RESET_ARB)
result.options |= QSurfaceFormat::ResetNotification;
if (result.version < 0x0302)
return result;
// v3.2 onwards: Profiles
Expand All @@ -889,6 +885,13 @@ QWindowsOpenGLContextFormat QWindowsOpenGLContextFormat::current()
result.profile = QSurfaceFormat::CoreProfile;
else if (value & GL_CONTEXT_COMPATIBILITY_PROFILE_BIT)
result.profile = QSurfaceFormat::CompatibilityProfile;
if (result.version < 0x0400)
return result;
// v4.0 onwards
value = 0;
QOpenGLStaticContext::opengl32.glGetIntegerv(RESET_NOTIFICATION_STRATEGY_ARB, &value);
if (value == LOSE_CONTEXT_ON_RESET_ARB)
result.options |= QSurfaceFormat::ResetNotification;
return result;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,10 +163,12 @@ static void updateFormatFromContext(QSurfaceFormat &format)
format.setOption(QSurfaceFormat::StereoBuffers);

if (format.renderableType() == QSurfaceFormat::OpenGL) {
GLint value = 0;
glGetIntegerv(GL_RESET_NOTIFICATION_STRATEGY_ARB, &value);
if (value == GL_LOSE_CONTEXT_ON_RESET_ARB)
format.setOption(QSurfaceFormat::ResetNotification);
if (format.version() >= qMakePair(4, 0)) {
GLint value = 0;
glGetIntegerv(GL_RESET_NOTIFICATION_STRATEGY_ARB, &value);
if (value == GL_LOSE_CONTEXT_ON_RESET_ARB)
format.setOption(QSurfaceFormat::ResetNotification);
}

if (format.version() < qMakePair(3, 0)) {
format.setOption(QSurfaceFormat::DeprecatedFunctions);
Expand All @@ -175,7 +177,7 @@ static void updateFormatFromContext(QSurfaceFormat &format)

// Version 3.0 onwards - check if it includes deprecated functionality or is
// a debug context
value = 0;
GLint value = 0;
glGetIntegerv(GL_CONTEXT_FLAGS, &value);
if (!(value & GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT))
format.setOption(QSurfaceFormat::DeprecatedFunctions);
Expand Down

0 comments on commit 1be4f6c

Please sign in to comment.