无法链接glsl顶点着色器

时间:2013-03-28 13:50:21

标签: opengl glsl

我正在学习OpenGL并尝试做一些简单的纹理。因此,我将纹理坐标作为属性提供。

我的顶点着色器出现了一个奇怪的错误:

#version 150

in vec2 position;
in vec3 color;
in vec2 texcoord;

out vec3 Color;
out vec2 Texcoord;

void main()
{
    Color = color;
    Texcoord = vec2 (1.0, 0.5); /* just for debugging hardcode texcords */
    gl_Position = vec4( position, 0.0, 1.0 );
}

着色器编译正常但是当我尝试链接着色器所属的程序时glGetProgramInfoLog()日志说:

  

错误:已编译的顶点着色器已损坏。

当我删除

in vec2 texcoord;

错误消失。我如何命名属性并不重要。一旦我添加第三个,我就会收到此错误。

没有编译错误。只是这个链接错误。

我在OS X 10.8.3上使用OpenGL 3.2核心上下文。我用GLEW。

更新

现在我可以链接这个:

#version 150

in vec2 position;
in vec3 color;
in vec2 texcoord;

out vec3 Color;
out vec2 Texcoord;

void main()
{
    Color = color;
    gl_Position = vec4( position, 0.0, 1.0 );
}

但是我加上

Texcoord = texcoord;

到主函数,着色器变坏了。我很绝望。这是什么?

1 个答案:

答案 0 :(得分:2)

您在上面的评论中说明了改变您的代码

const char* shaderSource = loadFile(path.c_str()).c_str();

string shaderString = loadFile(path.c_str());
const char* shaderSource = shaderString.c_str();

解决了您的问题。

std :: string对象正在被销毁,因为没有对它的引用,这反过来会破坏c字符串缓冲区。关于缓冲区内容在阅读时的内容,这是一个幸运的问题。