如果使用gl_color,则GLSL无法渲染

时间:2013-12-03 19:15:30

标签: java opengl glsl shader lwjgl

我正在尝试使用着色器在lwjgl中渲染纹理。一旦我在顶点着色器中使用gl_Color,我就没有输出。

这是有效的:

#version 120

attribute vec2 position;
attribute vec2 texCoord;

varying vec2 fragmentCoord;

void main()
{
    gl_Position = gl_ModelViewProjectionMatrix * vec4(position, 0.0f, 1.0f);
    //gl_FrontColor = gl_Color;
    gl_FrontColor = vec4(1.0f, 1.0f, 1.0f, 1.0f);
    fragmentCoord = (gl_TextureMatrix[0] * vec4(texCoord, 0.0f, 1.0f)).xy;
}

这不起作用:

#version 120

attribute vec2 position;
attribute vec2 texCoord;

varying vec2 fragmentCoord;

void main()
{
    gl_Position = gl_ModelViewProjectionMatrix * vec4(position, 0.0f, 1.0f);
    gl_FrontColor = gl_Color;
    gl_FrontColor = vec4(1.0f, 1.0f, 1.0f, 1.0f);
    fragmentCoord = (gl_TextureMatrix[0] * vec4(texCoord, 0.0f, 1.0f)).xy;
}

两者的片段着色器是:

#version 120

uniform sampler2D texture;

varying vec2 fragmentCoord;

void main()
{
    gl_FragColor = texture2D(texture, fragmentCoord) * gl_Color;
}

相同的代码适用于朋友,我想知道为什么它不适合我。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

片段着色器应具有:

gl_FragColor = texture2D(texture, fragmentCoord) * gl_FrontColor;

由于gl_FrontColor是顶点着色器的输出... gl_Color不是。