我試圖使用Qt 4.8.2使用QGLWidget來繪圖設定所需的OpenGL版本。我注意到QGLWidget創建的默認上下文不會顯示任何3.1以上的OpenGL輸出。 The Qt wiki has a tutorial,演示如何使用OpenGL 3.3繪製一個簡單的三角形。當我嘗試運行教程時,我得到一個空白屏幕。如果我將OpenGL版本更改爲3.1,我會得到預期的輸出(一個紅色三角形)。不能在QGLWidget來繪圖
我的視頻卡支持OpenGL 4.2,並且在創建QGLWidget之前調用QGLFormat::openGLVersionFlags()
表明Qt檢測到OpenGL 4.2和所有以前的桌面版本。
下面是另一個小例子:
#include <QApplication>
#include <QGLWidget>
#include <QDebug>
#include <QtDeclarative/qdeclarativeview.h>
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<const char*>(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()描述了格式選項(alpha通道,模板緩衝區等)。
誰知道爲什麼QGLWidget來繪圖將不與任何> = 3.1的工作?我在Linux上,有一個Nvidia GT440,glxinfo顯示它支持OpenGL 4.2.0。驅動程序版本打印在上面的示例輸出中。我不太確定還有什麼可以嘗試的。
編輯:我用我的這個編輯前的問題作了解釋一些非常嚴重的錯誤/假設。這個問題仍然類似,但希望現在更有意義。對不起,有任何困惑。
您的着色器是編譯/鏈接?如果您使用的是4.2環境和不兼容/不正確的着色器,那是造成空白窗口的原因之一。 –
我還沒有得到那麼多(着色器)。我想使用QGLWidget作爲QDeclarativeView的視口,然後添加一些使用着色器的3D內容。但即使是像Rectangle {}這樣的默認組件的簡單文件也不會呈現任何內容。它會呈現如預期,如果我不設置QGLFormat版本,但這個問題的整點是搞清楚爲什麼我不能把它擺在首位。另外,如果我(或Qt內部)使用不兼容的着色器,我會得到錯誤。唯一的輸出是我粘貼在我的問題。 – Prismatic
嗯,所以我建議您查看着色器日誌的唯一原因,是OpenGL 3.0的+要求自己的着色器編譯和裝載,而的OpenGL 2.0及以下沒有。我沒有通過QT使用OpenGL的經驗,所以我不知道爲您處理了多少。然而,在你鏈接的例子中,作者準備他或她自己的着色器。如果您不使用核心配置文件向顯卡提供着色器,則不會渲染任何內容。 –