我已经设置了一个纹理,MAG_FILTING=GL_NEAREST。
我不希望将其设置为GL_LINEAR,但在我的一个着色器中,我希望获取纹理的内容,就好像它是GL_LINEAR一样。
我一直在到处寻找答案,但找不到任何可靠的东西,也找不到任何例子。
当前代码为:
uniform sampler2DRect sampler1;
in vec2 vTexCoo;
main() {
out_diffuse = texture(sampler1, vTexCoo);
}
理论上我可以构建一个4像素内插的函数,但是...当然,一定有某种方法来指定要使用什么过滤。
2条答案
按热度按时间yv5phkfx1#
从OpenGL 3.3 Core Profile开始,可以使用Sampler Objects指定采样参数。当采样对象绑定到纹理图像单元时,它基本上会覆盖绑定的纹理对象的所有内部采样器设置。
使用与以下采样器类似的采样器可始终使用线性过滤:
将纹理绑定到纹理单元时,还必须绑定采样器对象。
不要忘记在使用
glBindSampler(texture_unit, 0);
绘制后解除绑定采样器,因为采样器绑定到纹理单位,而不是绑定到特定的着色器。请注意,由于您使用的是矩形纹理,因此不支持mipmap。
7fhtutme2#
OpenGL 3.3引入了Sampler Objects,技术上允许您请求什么。当采样器对象绑定到纹理单元时,采样器对象的状态将覆盖纹理对象中存储的采样器状态。
使用它将需要您为这个特定的绘制调用绑定采样器对象,然后解除绑定-但如果您可以这样做,您只需修改纹理滤镜参数并恢复它们,所以不清楚您从中获得了什么。
然而,这里还有另一种可能性。对于采样器对象,可以将相同的纹理绑定到不同的单位并使用不同的采样器选项。这可能会允许您将采样器对象绑定到某个未使用的纹理单位,并让需要其他过滤的着色器只使用不同的单位-但这将需要您将纹理绑定到多个单位,因此仍不清楚您可以从中获得什么…