我目前正在使用
将采样器对象绑定到纹理单元(GL_TEXTURE12是特定的) glBindSampler(12, sampler)
与纹理自身设置相比,初始设置非常明显。但是当我用
更改采样器参数时 glSamplerParameteri(sampler, GL_TEXTURE_***_FILTER, filter);
绑定到纹理单元的纹理过滤与之前相同,没有任何明显的变化。
我已经尝试在参数更改后再次将采样器重新绑定到纹理单元,但我很确定这不是必需的。
我可以做些什么改变来实现这个目标?
答案 0 :(得分:1)
由于我无法解释为什么这句话: “我在参数更改后尝试将纹理单元重新绑定到采样器,但我很确定这不是必需的。”< / em> 在评论中没有意义,请考虑以下C伪代码。
/* Thin state wrapper */
struct SamplerObject {
SamplerState sampler_state;
};
/* Subsumes SamplerObject */
struct TextureObject {
ImageData* image_data;
...
SamplerState sampler_state;
};
/* Binding point: GL4.x gives you at least 80 of these (16 per-shader stage) */
struct TextureImageUnit {
TextureObject* bound_texture; /* Default = NULL */
SamplerObject* bound_sampler; /* Default = NULL */
} TextureUnits [16 * 5];
vec4 texture2D ( GLuint n,
vec2 tex_coords )
{
/* By default, sampler state is sourced from the bound texture object */
SamplerState* sampler_state = &TextureUnits [n]->bound_texture->sampler_state;
/* If there is a sampler object bound to texture unit N, use its state instead
of the sampler state built-in to the bound texture object. */
if (TextureUnits [n]->bound_sampler != NULL)
sampler_state = &TextureUnits [n]->bound_sampler->sampler_state;
...
}
我认为混淆的根源来自这样一个事实:在GLSL中,用于识别要采样(和如何)的纹理图像单元的制服被称为sampler[...]
。希望这能解决一些混乱,所以我们都在同一页上。