我一直在使用带有QOpenGLWindow的着色器文件并使用版本330着色器,一切正常。 但是想切换一个Widget,以便能够将它停靠在我的主应用程序窗口中。从那以后,我一直在尝试获得正确的背景。
我可以使用QGLWidget创建正确的(我已经看到它已被弃用):
QGLFormat format;
format.setProfile(QGLFormat::CoreProfile);
format.setVersion(3,3);
QGLFormat::setDefaultFormat(format);
当我使用QOpenGLWidget执行完全相同的操作时: 我得到了
QOpenGLShader::compile(Vertex): ERROR: 0:1: '' : version '330' is not supported
对于某些人来说,这是合理的,因为QGLFormat的管理不对新类负责。
但是在切换到新类并使用以下命令设置核心配置文件后
QSurfaceFormat format;
format.setProfile(QSurfaceFormat::CoreProfile);
format.setVersion(3,3);
QSurfaceFormat::setDefaultFormat(format);
我很喜欢:
0 libobjc.A.dylib 0x00007fff89f9a0dd objc_msgSend + 29
1 libqcocoa.dylib 0x000000011085e3a3 QCocoaIntegration::createPlatformOpenGLContext(QOpenGLContext*) const + 83
2 org.qt-project.QtGui 0x000000010d2c954a QOpenGLContext::create() + 74
3 org.qt-project.QtWidgets 0x000000010cc35a6d QOpenGLWidgetPrivate::initialize() + 141
4 org.qt-project.QtWidgets 0x000000010cc36e58 QOpenGLWidget::event(QEvent*) + 232
5 org.qt-project.QtWidgets 0x000000010cbd632b QApplicationPrivate::notify_helper(QObject*, QEvent*) + 251
6 org.qt-project.QtWidgets 0x000000010cbd9648 QApplication::notify(QObject*, QEvent*) + 8136
7 org.qt-project.QtCore 0x000000010da59d83 QCoreApplication::notifyInternal(QObject*, QEvent*) + 115
8 org.qt-project.QtWidgets 0x000000010cc18879 sendWindowChangeToTextureChildrenRecursively(QWidget*) + 73
9 org.qt-project.QtWidgets 0x000000010cc03339 QWidget::setParent(QWidget*, QFlags<Qt::WindowType>) + 2217
10 org.qt-project.QtWidgets 0x000000010cbf4569 QLayout::addChildWidget(QWidget*) + 201
11 org.qt-project.QtWidgets 0x000000010cd1e740 QMainWindowLayout::setCentralWidget(QWidget*) + 32
12 ultrahaptics.Optimus_gui 0x000000010cb27f74 MainWindow::MainWindow() + 580
13 ultrahaptics.Optimus_gui 0x000000010cb2396b main + 59
我在macbook pro上使用Os X.如果有人知道解决方法/原因评论是受欢迎的。
答案 0 :(得分:1)
我已经在某处读过如果你在OS X上开发你的OpenGL程序(无论你使用什么平台:Qt Creator,XCode ......),你将只能使用一个版本的OpenGL 2.1或4.1,默认版本通常为2.1 因此,通过使用setDefaultFormat,我们强制系统为我们初始化OpenGL 4.1。
我上传了一个如何在Mac上使用OpenGL 4.X的示例。
享受
奈
答案 1 :(得分:0)
您应该将代码移动到main.cpp文件中:
QGLFormat format;
format.setProfile(QGLFormat::CoreProfile);
format.setVersion(3,3);
QGLFormat::setDefaultFormat(format);
你的main.cpp看起来应该是:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSurfaceFormat format;
// format.setDepthBufferSize(24);
// format.setStencilBufferSize(8);
format.setMajorVersion( 3 );
format.setMinorVersion( 3 );
format.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(format);
Dialog w;
w.show();
return a.exec();
}
您可能需要将QSurfaceFormat头文件添加到main.cpp!
我希望这会有所帮助。
欢呼声, 奈