Не удается установить желаемую версию OpenGL в QGLWidget

Я пытаюсь использовать QGLWidget в Qt 4.8.2. Я заметил, что контекст по умолчанию, создаваемый QGLWidget, не показывает никаких выходных данных для OpenGL выше 3.1. В Qt wiki есть учебник, который демонстрирует использование OpenGL 3.3 для рисования простого треугольника. Когда я пытаюсь запустить учебник, я получаю пустой экран. Если я изменю версию OpenGL на 3.1, я получу ожидаемый результат (красный треугольник).

Моя видеокарта поддерживает OpenGL 4.2, и вызов QGLFormat::openGLVersionFlags()перед созданием QGLWidget показывает, что Qt обнаруживает OpenGL 4.2 и все предыдущие настольные версии.

Вот еще один минимальный пример:

#include 
#include 
#include 
#include 

int main(int argc, char * argv[])
{
    QApplication app(argc, argv);

    qDebug() << "OpenGL Versions Supported: " << QGLFormat::openGLVersionFlags();

    QGLFormat qglFormat;
    qglFormat.setVersion(4,2);  // get expected output with (3,1) and below, else blank window
    qglFormat.setProfile(QGLFormat::CoreProfile);
    qglFormat.setSampleBuffers(true);

    QGLWidget* qglWidget = new QGLWidget(qglFormat);

    QString versionString(QLatin1String(reinterpret_cast(glGetString(GL_VERSION))));
    qDebug() << "Driver Version String:" << versionString;
    qDebug() << "Current Context:" << qglWidget->format();

    QDeclarativeView mainView;
    mainView.setViewport(qglWidget);
    mainView.setSource(QString("helloworld.qml"));
    mainView.show();

    return app.exec();
}

Вот выходные данные:

OpenGL Versions Supported:  QFlags(0x1|0x2|0x4|0x8|0x10|0x20|0x40|0x1000|0x2000|0x4000|0x8000|0x10000) 
Driver Version String: "4.2.0 NVIDIA 295.53" 
Current Context: QGLFormat(options QFlags(0x1|0x2|0x4|0x10|0x20|0x80|0x200|0x400) , plane  0 , depthBufferSize  24 , accumBufferSize  16 , stencilBufferSize  8 , redBufferSize  8 , greenBufferSize  8 , blueBufferSize  8 , alphaBufferSize  -1 , samples  4 , swapInterval  0 , majorVersion  4 , minorVersion  2 , profile  1 )  

Список перечислений QFlags()в первой строке описывает поддерживаемые версии OpenGL. Список показывает, что я поддерживаю все варианты, кроме версий OpenGL/ES. QFlags() в третьей строке описывает параметры формата (альфа-канал, буфер трафаретов и т.д.).

Кто-нибудь знает, почему QGLWidget не будет работать с чем-либо > = 3.1? Я использую Linux, у меня есть Nvidia GT440, и glxinfo показывает, что он поддерживает OpenGL 4.2.0. Версия драйвера напечатана в примере выходных данных выше. Я не слишком уверен, что еще попробовать.

Правка: Я сделал несколько довольно плохих ошибок /предположений с моим объяснением проблемы до этой правки. Проблема по-прежнему аналогична, но, надеюсь, теперь имеет немного больше смысла. Извините за путаницу.

9
задан Community 28 October 2012 в 16:27
поделиться