Opengl GLSL着色器不会影响渲染结果

Opengl GLSL着色器不会影响渲染结果,opengl,graphics,shader,fragment-shader,vertex-shader,Opengl,Graphics,Shader,Fragment Shader,Vertex Shader,我正在学习教程,刚刚开始绘制多边形。但我有一个问题:着色器源的内容并不重要。以下是相关代码: 主要条款c: vert.glsl: frag.glsl: 如您所见,代码与教程非常相似。但是,我是否使用行outColor=vec4(1.0,1.0,1.0,1.0)或outColor=vec4(0.0,0.0,0.0,1.0)在片段着色器中,我始终获得以下输出: 只要着色器源代码编译,我就可以执行并得到这个结果。我甚至不需要返回任何东西,它仍然会呈现相同的效果。如果在vert着色器中添加或减去位置的

我正在学习教程,刚刚开始绘制多边形。但我有一个问题:着色器源的内容并不重要。以下是相关代码:

主要条款c:

vert.glsl:

frag.glsl:

如您所见,代码与教程非常相似。但是,我是否使用行
outColor=vec4(1.0,1.0,1.0,1.0)
outColor=vec4(0.0,0.0,0.0,1.0)在片段着色器中,我始终获得以下输出:

只要着色器源代码编译,我就可以执行并得到这个结果。我甚至不需要返回任何东西,它仍然会呈现相同的效果。如果在vert着色器中添加或减去
位置
的x或y值,则得到相同的结果。如果我犯了语法错误,opengl尝试编译时程序就会崩溃,但编译什么似乎无关紧要


如果有帮助的话,我正在使用NVIDIA图形卡和NVIDIA驱动程序运行Debian<代码>glGetString(GL_版本)
返回“4.2.0 NVIDIA 304.117”。我正在使用freeglut作为渲染上下文。

好的,结果是着色器编译中出现错误。我使用的是
(location=#)
,但没有在我的着色器中包含
#扩展GL#u ARB_explicit_attrib_location:enable

我之前的一条评论指出了问题:


我怀疑您在创建或链接着色器时出错。您可以调用glGetShaderiv()以在这方面提供帮助


不如改为填充
gl\u FragColor
?我没有零钱。也没有提到内置的
gl\u FragColor
输出。我可以在
glBegin()
(或等效)调用之前从Invoke
glUseProgram()
查看内容。你在这样做吗?我怀疑你在创建或链接着色器时出错。您可以调用
glGetShaderiv()
,在这方面为您提供帮助。
float vertices[] = {
     0.0,    0.5,
     0.5, -0.5,
    -0.5, -0.5
};

GLuint vbo;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
char *vertsource = loadsource("vert.glsl");
glShaderSource(vertexShader, 1, &vertsource, NULL);
free(vertsource);
glCompileShader(vertexShader);

GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
char *fragsource = loadsource("frag.glsl");
glShaderSource(fragmentShader, 1, &fragsource, NULL);
free(fragsource);
glCompileShader(fragmentShader);

GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
//Only necesary if multiple outputs:
//glBindFragDataLocation(shaderProgram, 0, "outColor");
glLinkProgram(shaderProgram);
glUseProgram(shaderProgram);

//0 is the position input for vert shader
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
#version 150

layout(location = 0) in vec2 position;

void main()
{
    gl_Position = vec4(position, 0.0, 1.0);
}
#version 150

out vec4 outColor;

void main()
{
        outColor = vec4(1.0, 1.0, 1.0, 1.0);
        //Alternative line:
        //outColor = vec4(0.0, 0.0, 0.0, 1.0);
}