我正在尝试使用以下代码将QOpenGLWidget的OpenGL版本设置为3.3。

QSurfaceFormat defaultFormat;
defaultFormat.setProfile(QSurfaceFormat::CoreProfile);
defaultFormat.setVersion(3, 3);
defaultFormat.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
QSurfaceFormat::setDefaultFormat(defaultFormat);
QApplication a(argc, argv);

问题是当我稍后致电glGetString(GL_VERSION)时,我得到了



作为输出。这应该发生吗?看来我可以使用2.1或4.1,并且Qt不允许我在两者之间使用任何东西。

最佳答案

是的,那很正常。并且完全有效。

除了3.2 core profile break之外,每个较高的OpenGL版本都向后兼容较低的OpenGL版本。这样,如果您要求3.3,则实现可以自由地给您4.1,因为4.1可以完成3.3的所有工作。

实际上,如果您要求使用2.1,则允许实现为您提供4.1兼容性配置文件,因为该配置文件向后兼容2.1。现在在MacOSX上,您将无法获得,因为Apple并未公开任何兼容性配置文件。但是他们可以。

07-27 13:39