2016-11-02 143 views
2

我在窗口上設置了QSurfaceFormat,這個表面格式的GL版本號設置爲「3.0」。代碼:爲什麼我不能在Qt中使用OpenGL ES 3.0?

static QSurfaceFormat createSurfaceFormat() { 
    QSurfaceFormat format; 
    format.setSamples(4); 
    format.setDepthBufferSize(24); 
    format.setStencilBufferSize(8); 
    format.setVersion(3, 0); 
    return format; 
} 

int main(int argc, char *argv[]) { 
    // ... 

    QQmlApplicationEngine engine; 
    engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); 
    QWindow* window = (QWindow*) engine.rootObjects().first(); 
    window->setFormat(::createSurfaceFormat()); 

    // ... 
} 

此外,在main()我啓用OpenGL ES模式,就像這樣:

QGuiApplication::setAttribute(Qt::AA_UseOpenGLES); 

這意味着我請求GL ES 3.0上下文。

ANGLE docs說(在一個表格附近開始)GL ES 3.0 -> D3D 11 API翻譯支持被實現。並且我的系統支持根據dxdiag.exe的D3D 11。

但是,當我啓動我的應用程序,其中包含此QML代碼...

Text { 
    text: OpenGLInfo.majorVersion + "." + OpenGLInfo.minorVersion 
} 

...我看到 「2.0」 顯示。另外,使用我描述的方法here,我已經確定我的PC上最大支持的着色語言版本是「100」,也就是1.0。

與此同時,從this Qt blog post我知道Qt支持GL ES 3.0應用程序。

那麼我爲什麼不能使用OpenGL ES 3.0 Qt中

+0

*我設置QSurfaceFormat在我的窗口上,並且這種表面格式的GL版本號設置爲「3.0」*你怎麼做到這一點?你在說什麼窗口課? – peppe

+0

@peppe:我編輯了問題以包含該信息。 –

+1

在代碼中粘貼的方式看起來不正確,因爲它在創建窗口後設置了格式*(並且這太遲了,您必須先設置它)。在main中創建'Q(Gui)Application'對象之前,嘗試調整'QSurfaceFormat :: setDefaultFormat'。 – peppe

回答

4

您需要設置一個QSurfaceFormat上QWindow之前創建的窗口本身(通過create())。如果通過QML創建頂級窗口中,您有當create()被實際調用無法控制,所以解決方案改變您創建您的問與答somwhere之前默認的表面格式(GUI)應用:

int main(int argc, char **argv) { 
    // createSurfaceFormat() is the function you pasted above 
    QSurfaceFormat::setDefaultFormat(createSurfaceFormat()); 

    QApplication app(argc, argv); 
    // etc. 
相關問題