GLSL UV(vec2)coords优化出来

时间:2015-03-16 11:46:37

标签: opengl glsl uv-mapping

我正在使用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");

position为0,uvCoord为-1,所以我只能假设uvCoord已被优化,即使我使用它来传递它从顶点着色器到片段着色器。

结果是几何体显示但只有黑色,没有纹理映射。

我在Direct3D和HLSL中编写了类似的应用程序,没有优化属性的问题。我认为这是一件很简单的事情,我忘了或不做但却没有发现什么。

2 个答案:

答案 0 :(得分:0)

将'texture2D'替换为'texture',将使用您的属性。

错误的GLSL编译器:它不应该编译着色器,因为核心配置文件中没有texture2D。

答案 1 :(得分:-1)

编辑:您在设置glEnableVertexAttribArray(1);后可能忘记致电glVertexAttribPointers