错误:不支持 GLSL 3.30。支持的版本有:1.10、1.20、1.30、1.00 ES、3.00 ES、3.10 ES 和 3.20 ES [关闭]
Posted
技术标签:
【中文标题】错误:不支持 GLSL 3.30。支持的版本有:1.10、1.20、1.30、1.00 ES、3.00 ES、3.10 ES 和 3.20 ES [关闭]【英文标题】:error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, 3.00 ES, 3.10 ES, and 3.20 ES [closed] 【发布时间】:2018-06-10 12:43:41 【问题描述】:我有一个使用 OpenGL 开发的 3D 应用程序的 Qt 代码。我正在尝试使用 QtCreator 构建/运行 Qt 应用程序,但出现以下错误:
Error in compiling shader.
0:1(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, 3.00 ES, 3.10 ES, and 3.20 ES
我尝试按照this answer 的建议将以下内容添加到我的代码中:
QSurfaceFormat glFormat;
glFormat.setVersion(3, 3);
glFormat.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(glFormat);
实际上上面的代码有效,我的意思是错误得到了解决。但是,当应用程序运行时,它不显示/渲染任何 3D 内容。例如,将 STL 文件导入 Qt 应用程序时,不会显示 STL 内容。有人遇到过类似的问题吗?
【问题讨论】:
【参考方案1】:只是为了帮助下一个可能遇到此类问题的人:
我在朋友的计算机上构建/运行了该应用程序,该计算机有两张显卡:一张 Intel 和一张 Nvidia。
在 Intel 显卡的情况下,之前在 OpenGL 版本上也出现过同样的问题。
在Nvidia显卡的情况下,没有发生OpenGL错误。应用程序运行没有任何问题,并且可以呈现/查看导入的 STL 文件。因此,我的 OpenGL 错误是与硬件相关的。
我很想知道修改代码需要多少努力才能使 3D 应用程序也可以在 Intel 显卡上运行。谁知道?
【讨论】:
如果它在 NVIDIA 上运行但不在 Intel 上运行,那么您可能在代码中依赖于 NVIDIA 的不符合标准的行为。英伟达有一个默认的 VertexArrayObject 绑定到位置0
,它不符合标准并且没有正确使用 VAO 是代码代码在 NVIDIA 上运行但在 Intel 或 ATI 上不运行的最常见错误。
@t.niese 谢谢。我在我的项目中搜索了关键字VertexArrayObject
,但没有找到任何东西。我还可以搜索什么其他关键字来定位这样的实现?
我不太了解 QT API。但是在你的代码中的某个地方你创建了一个缓冲区来保存你想要渲染的数据,你应该使用glGenVertexArrays
创建一个 VAO。然后,您使用glVertexAttribPointer
和glEnableVertexAttribArray
告诉opengl 数据中的位置、颜色等位于何处,在这些函数之前您应该拥有glBindVertexArray
。因此,如果 glBindVertexArray
或 glGenVertexArrays
丢失,那么您可能依赖于 Nvidia 错误。
@t.niese 我只是想知道是否有任何好的文档可供我学习以了解该主题。谢谢。
opengl specs 或 official OpenGL Wiki。有一些像learnopengl.com - Hello-Triangle 这样的教程似乎很好地解释了某些事情。但请注意,我所知道的所有教程要么写得不好,要么有错误。因此,您应该始终与官方 wiki 和规范进行交叉检查。如果您还有其他问题,请针对您遇到的明确问题创建一个问题。以上是关于错误:不支持 GLSL 3.30。支持的版本有:1.10、1.20、1.30、1.00 ES、3.00 ES、3.10 ES 和 3.20 ES [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
C++ OpenGL 着色版本错误 - 不支持 GLSL x [Ubuntu 16.04]
超过一个字符指针时的GLSL编译错误(glShaderSource)