如何使用texelFetch()获取sampler1D纹理中的元素



我在sampler1D纹理中存储了一个1D高斯滤波器,并将其发送到片段着色器。在进行垂直和水平模糊时,我使用texelFetch((来获取samlper1D贴图中的权重,但不起作用。数据是如何存储在sampler1D中的?

in vec2 texCoord; 
uniform int BlurFilterWidth; 
uniform sampler1D BlurFilterTex;
uniform sampler2D OriginalImageTex;
uniform sampler2D ThresholdImageTex;
uniform sampler2D HorizBlurImageTex;
uniform sampler2D VertBlurImageTex;
layout (location = 0) out vec4 FragColor;
void HorizBlurImage()
{

ivec2 pix = ivec2(gl_FragCoord.xy);
int TexSize = textureSize(BlurFilterTex,0);
vec4 sum = texelFetch(ThresholdImageTex,pix,0) * texelFetch(BlurFilterTex, 0, 0).r;

for( int i = 1; i < BlurFilterWidth; i++){
sum += texelFetchOffset(ThresholdImageTex, pix, 0, ivec2(i,0)) * texelFetch(BlurFilterTex, i*TexSize, 0).r;
sum += texelFetchOffset(ThresholdImageTex, pix, 0, ivec2(-i,0)) * texelFetch(BlurFilterTex, i*TexSize, 0).r;
}
FragColor = sum;
}

GL_TEXTURE_1D中,元素被组织在一维数组中。纹理坐标只是一个整数,用于寻址数组中的元素。那么,为什么要将索引i乘以TexSize呢?纹理坐标简单地为i:

texelFetch(BlurFilterTex, i*TexSize, 0).r;

texelFetch(BlurFilterTex, i, 0).r;

最新更新