损坏的顶点和片段着色器
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 结尾的字符串引起的。它们的末尾都可能有非打印字符。
您可以在调试器中查看VertexShaderCode
和FragmentShaderCode
字符串,找出是否有任何错误字符或它们是否不是以空值结尾的。
我发现人们遇到了同样的错误 here 和 here。
要修复它们,请使用 text edit、text mate 或 sublime text(一些非常基本的文本编辑器)打开您的 GLSL 文件,然后将它们转换为纯文本并将它们另存为新文件。
【讨论】:
我遇到的第一个问题是“if(VertexShaderStream.is_open())”返回 false。我添加了一个 else 块,当文件未打开且程序停在那里时会引发致命错误。 编辑:我解决了这个问题。着色器现在按应有的方式编译(没有错误)。现在,当我尝试使用该程序时,什么也没有发生(我得到一个纯黑屏)。我将添加 GL 错误检查 我明白了!着色器编译完美。我遇到的问题(当然)非常愚蠢。我启用了双缓冲,但我没有交换我的窗口..以上是关于损坏的顶点和片段着色器的主要内容,如果未能解决你的问题,请参考以下文章
如果几何着色器处于活动状态,如何将信息从顶点着色器传递到片段着色器?