我正在用 GLubyte 从映射到 (0,1) 的 R(实数)的浮点值填充 2D 纹理并乘以 255,得到值 (0, 255)。保存为 GL_R8,因为我只需要纹理中的 1 个值。这可以例如表示一个数学函数。
我还上传了一维纹理以用作颜色图/颜色条。然后,我根据 2D 纹理的值从 1D 纹理中采样。
这就是我的片段着色器的工作方式:
#version 400
in vec2 f_textureCoord;
layout(location = 0) out vec4 FragColor;
uniform sampler2D textureData;
uniform sampler1D colorBar;
void main() {
/* Values in the sampler are on (0, 1) * 255 => (0, 255) */
vec3 texColor = texture2D(textureData, f_textureCoord).rgb;
float s = texColor.r;
/* Use the texture value as a coordinate in the 1D colorbar texture */
vec3 color = texture1D(colorBar, s).rgb;
float val = color.r;
FragColor = vec4(val, val, val, 1);
}
使用这个我得到以下错误:
glValidateProgram:验证错误:不同类型的采样器指向同一个纹理单元
但是,我的代码按预期工作,至少是渲染结果!
我的问题是:
1) 为什么我会收到此错误/警告?---在评论中回答...
2)这是我想要做的正确方法吗?我应该使用另一种形式的缓冲区而不是将我的函数值保存在 2D 纹理中吗?
3) 我假设当我的数学函数(填充 2D 纹理)超过某个纹理大小限制时会遇到问题。关于我应该如何着手解决这个问题的任何建议?