OpenGL着色器不将变量从顶点传递到片段着色器

时间:2014-11-07 16:44:44

标签: opengl glsl shader fragment-shader vertex-shader

我遇到了一些非常奇怪的事情。

我有一个非常简单的程序,使用以下着色器管道呈现简单的全屏广告牌:

VERTEX SHADER:

#version 430

layout(location = 0) in vec2 pos;

out vec2 tex;

void main()
{
    gl_Position = vec4(pos, 0, 1);
    tex = (pos + 1) / 2;
}

FRAGMENT SHADER:

#version 430

in vec2 tex;

out vec3 frag_color;

void main()
{
    frag_color = vec3(tex.x, tex.y, 1);
}

程序总是将四边形呈现在正确的位置(所以我排除了VAO作为罪魁祸首),但由于某种原因忽略了我为tex设置的任何值并始终将其设置为vec2(0,0),渲染一个蓝色的盒子。

这里有什么我想念的吗?我以前做过很多opengl应用程序,而且我从未遇到过这个问题。 :/

1 个答案:

答案 0 :(得分:0)

我看到OpenGL 2.0的实现在编译时遇到问题,当添加浮点数而不是显式转换的整数时。
即使这不是一个问题,我认为4.3的实现可能是可能的,也许你应该只为你的“整数”常量添加点和后缀。

你的顶点着色器的最后一行似乎是唯一一个可能存在问题的行(我相信值总是在构造函数中输入:p)所以你会有这样的东西:

tex = (pos + 1.0f) / 2.0f;

请记住,你的着色器可以编译成千上万的不同实现,所以始终是明确的是一个好习惯!