Opengl GLSL UV(vec2)坐标优化

Opengl GLSL UV(vec2)坐标优化,opengl,glsl,uv-mapping,Opengl,Glsl,Uv Mapping,我正在使用OpenGL4.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) {

我正在使用OpenGL4.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);
}
顶点着色器:

#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");
我得到了
位置的0和
uvCoord
的-1,因此我只能假设
uvCoord
已优化,即使我使用它将其从顶点着色器传递到片段着色器

结果是几何体显示为黑色,但没有纹理贴图


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

编辑:您可能忘记调用
GlenableVertexAttributeArray(1)
设置
glvertexattributepointers

后,将“texture2D”替换为“texture”,然后将使用您的属性


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

为什么有两个顶点着色器?一个帖子。@genpfault看起来像一个打字错误;第二个着色器看起来像一个片段着色器。源看起来正确,并且变量不应该被优化掉。您是否知道舒尔getEffect()为您提供了正确的程序对象?并且您完全确定片段着色器已编译?不应该<代码>纹理2D()
不是核心配置文件中的内置函数。它只是
texture()
.gl\u TexCoord在版本330 core中不存在