【发布时间】:2017-11-23 09:31:52
【问题描述】:
我有一个使用 QOpenGLWidget 作为其主窗口的 Qt 应用程序。它使用 OpenGL ES 2.0 进行绘制,使用 QOpenGLFunctions 来解析 OpenGL 函数。在 Windows 和 Linux 上一切正常(使用相同的 Qt 应用程序)。我在所有三个平台上都使用 Qt 5 和 Qt Creator。
但是,在 Mac 上,绘制图形不起作用。当我第一次尝试运行该应用程序时,它崩溃了,因为它无法编译着色器程序,并抱怨“precision”关键字在语法上不正确。这可能表明着色器编译器需要不同版本的着色器语言。
我尝试在着色器程序的开头插入“#version 100”,但这没有帮助:这次的错误消息是不支持版本 100。
我发现我可以通过从着色器中删除“精度”语句在显示器上显示一些图形。但是,显示不正确 - 缺少一些图形。我发现只绘制了不透明 (alpha = 1) 的像素。
我对我使用 OpenGL ES 2.0 的正确性充满信心,因为除了在 Windows 和 Linux 上的 Qt 下工作之外,相同的代码在 Android (在本机代码中)和 iOS 上的 Qt 之外也能完美地工作。
根据 Qt 文档,QOpenGLFunctions '提供对 OpenGL ES 2.0 API 的跨平台访问'。这似乎不是真的。
这个问题有解决办法吗?我花了几个小时搜索,一无所获。
【问题讨论】:
-
你在使用
QSurfaceFormat::setProfile()吗? (Apple 不使用 win/linux 等配置文件)。如果您不使用Qt 5.1可能不会,尽管QOpenGLContext::versionFunctions()在这种情况下应该可以帮助您。如果您使用的是Qt 5.1,那么QAbstractOpenGLFunctions最终可能会有所帮助。 qt.apidoc.info/5.1.1/qtgui/… -
我试过了。它没有帮助。明确询问 OpenGL ES 2.0 上下文会导致黑屏和“创建上下文失败”错误。目前,通过摆脱着色器中的“精度”,我得到了除像素透明度之外的一切工作,如上所述。
-
此时我唯一的其他建议是看看这个问题(作者发布了他的问题的解决方案)。 stackoverflow.com/q/23779357/499581
标签: macos qt opengl-es opengl-es-2.0