在后期着色器中查找表的纹理过滤

我通过绘制到FBO进行后期处理,然后在将FBO的纹理绘制到屏幕上时应用某个片段着色器。 我想使用查找表纹理来应用颜色分级。 由于我的目标是OpenGL ES 2.0和更旧的PC,我不能使用3D纹理。 相反,我可以使用2D纹理作为3D查找表的图层。

我所关心的是纹理查找时的正确性和性能。 我的查找纹理需要线性过滤,所以我不必有一个完整的256 ^ 3大小的查找表来覆盖所有的色调。

我的片段着色器看起来像这样:上下舍入B以获取纹理的两个区域进行采样,相应地向R / G添加偏移量,并使用两个偏移量.rg值对纹理进行采样两次。 最后基于B进行线性插值。

但是据我了解,当GPU遇到纹理上的纹理线性过滤时,它将计算这些调用的input坐标,以便相邻像素并行获得一个导数。 这个导数用于确定如何采样纹理像素。

由于这是一个后期处理,我不希望两个相邻的像素互相影响。 它可能是来自明亮的蓝天像素旁边的精灵边缘的黑色像素。 在查找表中,这两个将需要采样远点。 那么GPU是否会决定衍生品是巨大的(缩小),并尝试线性抽样,并将所有随机的中间纹理元素包含在查找表中?

有没有办法让我的线性滤波器忽略邻近的像素,只能从最近的4个像素插值? 把所有东西都当作放大镜来处理?

问题类似于这个被问及HLSL的问题,但我的目标是OpenGL 3.0和OpenGL ES 2.0: 颜色分级,着色器和三维纹理

该派生仅用于select要采样的集合中的哪个mipmap。

如果通过selectGL_LINEAR作为最小化纹理采样器插值或通过将mipmap级别限制设置为0来禁用mipmap,则GPU将执行简单的线性插值。