损坏的顶点和片段着色器
我开始使用http://www.opengl-tutorial.org来拾取OpenGL。
它使用following code来加载和编译的着色器(联系的,因为代码是为这个职位太长时间,我认为它的东西与我的着色器)损坏的顶点和片段着色器
运行此代码,它打印出“错误:编译顶点着色器已损坏”和“错误:编译的片段着色器已损坏”。我着色器下面
的Vertex Shader
#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教程,所以我自己去学习这些东西,所以我可以用我自己的代码编写教程。
预先感谢
这是与XCode的出现并且通常是由文本编码或不适当空终止字符串引起的一个常见问题。在它们的结尾处可能有非打印字符。
您可以在调试器中查看VertexShaderCode
和FragmentShaderCode
字符串,并查看是否有任何错误的字符或者它们是否以空字符结尾。
要解决这些问题,请使用文本编辑,文本伴侣或崇高文本(一些非常基本的文本编辑器)打开GLSL文件,并将它们转换为文本并将它们保存为新文件。
我遇到的第一个问题是“if(VertexShaderStream.is_open())”返回false。我添加了一个else块,当文件没有打开并且程序在那里停止时会引发致命错误。 – 2014-08-31 11:10:34
编辑:我解决了这个问题。着色器现在可以进行编译(不发生错误)。现在,当我尝试使用该程序时,什么都没有发生(我得到一个普通的黑屏)。我将添加GL错误检查 – 2014-08-31 11:21:15
我知道了!着色器编译完美。我的问题是(当然)非常愚蠢。我启用了双缓冲,但我没有交换我的窗户。 – 2014-08-31 11:43:19
我想这只是你在你的问题中复制它们的方式,但你的顶点和片段着色器是错误的。 – GuyRT 2014-08-31 08:21:33