我正在使用 OpenGL 4.3 和 GLSL 编写应用程序,我需要着色器来进行基本的 UV 映射。问题是 GLSL 编译器似乎正在优化 UV 坐标。我无法从应用程序方面访问它们。
顶点着色器:
#version 330 core
uniform mat4 projection;
layout (location = 0) in vec4 position;
layout (location = 1) in vec2 uvCoord;
out vec2 texCoord;
void main(void)
{
texCoord = uvCoord;
gl_Position = position;
}
顶点着色器:
#version 330 core
in vec2 texCoord;
out vec4 color;
uniform sampler2D tex;
void main(void)
{
color = texture2D(tex, texCoord);
}
顶点和片段着色器都编译和链接没有错误,但是当我使用以下代码调用属性时:
GLint effectPositionLocation = glGetAttribLocation(effect->getEffect(), "position");
GLint effectUVLocation = glGetAttribLocation(effect->getEffect(), "uvCoord");
我得到 0position
和 -1 uvCoord
,所以我只能假设uvCoord
已经被优化,即使我使用它将它从顶点着色器传递到片段着色器。
结果是显示几何图形,但仅以黑色显示,没有纹理映射。
我在 Direct3D 和 HLSL 中编写了类似的应用程序,没有属性被优化的问题。我在想这是一件简单的事情,我忘记了或没有做,但还没有发现。