我正在编写一个片段着色器,它必须在给定像素周围的区域中对给定纹理进行采样。我使用texelFetch
而不是,texture
因为我想要相邻像素的精确值而不进行任何过滤。最初我编写的代码如下:
in vec2 pixel;
uniform sampler2D tex;
void main() {
float leftPixel = texelFetch(tex, ivec2(pixel.x - 1, pixel.y), 0).r;
...
}
然而,在阅读了有关依赖纹理读取的内容后,我将代码更改为更像这样:
in vec2 pixel;
in vec2 leftPixelLoc;
uniform sampler2D tex;
void main() {
float leftPixel = texelFetch(tex, ivec2(leftPixelLoc), 0).r;
...
}
在上面的代码中,顶点着色器leftPixelLoc
为我计算。我希望这可以防止依赖纹理读取。但是,我现在意识到,ivec2
无论如何,简单地调用都可能导致依赖纹理读取。是这样吗?如果是这样,如何在访问目标像素周围像素的精确值时避免依赖纹理读取?