我正在尝试将纹理单元0分配给sampler2D
制服,但是制服的值没有改变。
我的程序正在根据其高程(Y坐标)为点着色。在纹理中查找它们的颜色。
这是我的顶点着色器代码:
#version 330 core
#define ELEVATION_MODE
layout (location = 0) in vec3 position;
layout (location = 1) in float intensity;
uniform mat4 vpMat;
flat out vec4 f_color;
#ifdef ELEVATION_MODE
uniform sampler2D elevationTex;
#endif
#ifdef INTENSITY_MODE
uniform sampler2D intensityTex;
#endif
// texCoords is the result of calculations done on vertex coords, I removed the calculation for clarity
vec4 elevationColor() {
return vec4(textureLod(elevationTex, elevationTexCoords, 0), 1.0);
}
vec4 intensityColor() {
return vec4(textureLod(elevationTex, intensityTexCoords, 0), 1.0);
}
int main() {
gl_Position = vpMat * vec4(position.xyz, 1.0);
#ifdef ELEVATION_MODE
f_color = elevationColor();
#endif
#ifdef COLOR_LODDEPTH
f_color = getNodeDepthColor();
#endif
}
这是我的片段着色器:
#version 330 core
out vec4 color;
flat in vec4 f_color;
void main() {
color = f_color;
}
执行此着色器时,我绑定了2个纹理:
我正在使用glUniform1i
来设置制服的值:
glUniform1i(elevationTexLocation, (GLuint)0);
但是当我运行程序时,统一的elevationTex
的值为1
而不是0
。
如果我删除了glUniform1i
调用,则统一值不会更改(仍为1),因此我认为该调用没有执行任何操作(但不会产生错误)。
如果我将制服的类型更改为float
,而呼叫从glUniform1i
更改为:
glUniform1f(elevationYexLocation, 15.0f);
统一中的值现在为15.0f
。因此,在我的程序中,调用glUniform1i
的位置没有问题,它对制服的价值没有影响。
关于我可能做错什么的任何想法吗?
我可以为您提供更多代码,但实际上并不能访问它,因此如果您知道没有它的答案,那就太好了。如果您需要代码的C ++部分,请询问,我将尝试检索重要部分