Opengl GLSL UV(vec2)坐标优化
我正在使用OpenGL4.3和GLSL编写一个应用程序,我需要着色器来进行基本的UV映射。问题是GLSL编译器似乎正在优化UV坐标。我无法从应用程序端访问它们 顶点着色器: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) {
#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中不存在