我在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;
}
1条答案
按热度按时间kzmpq1sx1#
在
GL_TEXTURE_1D
中,元素被组织在一个一维数组中。纹理坐标只是一个整数,用于寻址数组中的元素。那么,为什么要将索引i
乘以TexSize
呢?纹理坐标就是i
:texelFetch(BlurFilterTex, i*TexSize, 0).r;