损坏的顶点和片段着色器

Posted

技术标签:

【中文标题】损坏的顶点和片段着色器【英文标题】:Corrupt Vertex and Fragment Shader 【发布时间】:2014-08-30 21:12:02 【问题描述】:

我开始使用 http://www.opengl-tutorial.org 学习 OpenGL。 它使用following code 加载和编译着色器(链接是因为这篇文章的代码太长,我认为这与我的着色器有关)

运行此代码时,它会打印出“错误:已编译的顶点着色器已损坏”和“错误:已编译的片段着色器已损坏”。我的着色器正在关注

顶点着色器

#version 330 core
out vec3 color;

void main()
    color = vec3(1,0,0);

片段着色器

#version 330

layout (location = 0) in vec3 position;

void main()

    gl_Position.xyz = position;
    gl_Position.w = 1.0;

我正在使用 XCode 5.1.1、OpenGL 3.3 和 GLSL 3.30。

如果你们能帮助我度过这一点,那就太棒了。我被一个没有使用 VAO 的 YouTube 教程卡住了,所以我自己去学习这些东西,这样我就可以用自己的代码编写教程了。

提前致谢

【问题讨论】:

我想这只是您在问题中复制它们的方式,但是您的顶点和片段着色器的方式错误。 【参考方案1】:

这是 XCode 中出现的一个常见问题,通常是由文本编码或不正确的以 null 结尾的字符串引起的。它们的末尾都可能有非打印字符。

您可以在调试器中查看VertexShaderCodeFragmentShaderCode 字符串,找出是否有任何错误字符或它们是否不是以空值结尾的。

我发现人们遇到了同样的错误 here 和 here。

要修复它们,请使用 text edit、text mate 或 sublime text(一些非常基本的文本编辑器)打开您的 GLSL 文件,然后将它们转换为纯文本并将它们另存为新文件。

【讨论】:

我遇到的第一个问题是“if(VertexShaderStream.is_open())”返回 false。我添加了一个 else 块,当文件未打开且程序停在那里时会引发致命错误。 编辑:我解决了这个问题。着色器现在按应有的方式编译(没有错误)。现在,当我尝试使用该程序时,什么也没有发生(我得到一个纯黑屏)。我将添加 GL 错误检查 我明白了!着色器编译完美。我遇到的问题(当然)非常愚蠢。我启用了双缓冲,但我没有交换我的窗口..

以上是关于损坏的顶点和片段着色器的主要内容,如果未能解决你的问题,请参考以下文章

片段着色器是不是处理来自顶点着色器的所有像素?

顶点着色器+片段着色器

在顶点和片段着色器中访问同名统一失败

如果几何着色器处于活动状态,如何将信息从顶点着色器传递到片段着色器?

OpenGL:为啥我不能将单个浮点数从顶点着色器传递到片段着色器?

SpriteKit 中的顶点着色器