我遇到了一些非常奇怪的事情。
我有一个非常简单的程序,使用以下着色器管道呈现简单的全屏广告牌:
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应用程序,而且我从未遇到过这个问题。 :/
答案 0 :(得分:0)
我看到OpenGL 2.0的实现在编译时遇到问题,当添加浮点数而不是显式转换的整数时。
即使这不是一个问题,我认为4.3的实现可能是可能的,也许你应该只为你的“整数”常量添加点和后缀。
你的顶点着色器的最后一行似乎是唯一一个可能存在问题的行(我相信值总是在构造函数中输入:p)所以你会有这样的东西:
tex = (pos + 1.0f) / 2.0f;
请记住,你的着色器可以编译成千上万的不同实现,所以始终是明确的是一个好习惯!