我想在Qt的4.8.2使用QGLWidget来绘图。 我注意到,QGLWidget来绘图创建默认情况下不显示上述3.1对OpenGL任何输出。 Qt的维基有一个教程演示使用OpenGL 3.3画一个简单的三角形。 当我尝试运行教程中,我得到了一个空白屏幕。 如果我改变了OpenGL版本3.1,我得到的预期输出(红色三角形)。
我的显卡支持OpenGL 4.2,并呼吁QGLFormat::openGLVersionFlags()
创建QGLWidget来绘图之前显示的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。 驱动程序版本被印刷在样品输出的上方。 我也不太清楚什么尝试。
编辑:我用我的这个编辑前的问题作了解释一些非常严重的错误/假设。 这个问题仍然是相似的,但希望让更多的意义了。 对不起,任何混乱。