glsl纹理访问同步,openCL vs glsl图像处理

时间:2016-09-18 11:03:38

标签: c++ opengl parallel-processing glsl opencl

这可能是一个微不足道的问题。 我很好奇glsl在通过片段着色器访问纹理数据时如何同步。 假设我在片段着色器中有如下代码。

void main() {
    vec3 texCoord = in_texCoord;
    vec4 out_voxel_intensity = texture(image, vec3(texCoord.x , texCoord.y, texCoord.z));
    out_voxel = float(out_voxel_intensity) ;
    if(out_voxel <= threshold)
    {
        out_voxel = 0.0;
        return;
    }
    for(int i = -int(kernalSize); i <= int(kernalSize);++i)
        for(int j = -int(kernalSize); j <= int(kernalSize); ++j)
            for(int k = -int(kernalSize); k <= int(kernalSize); ++k)
            {
                float x_o = texCoord.x + i / (imageSize.x);
                float y_o = texCoord.y + j / (imageSize.y);
                float z_o = texCoord.z + k / (imageSize.z);
                if(x_o < 0.0 || x_o > 1.0
                    || y_o  < 0. || y_o > 1.0
                    || z_o  < 0. || z_o  > 1.0)
                    continue;
                if(float(texture(image, vec3(x_o, y_o, z_o))) <= threshold)
                {
                    out_voxel = 0.0;
                    return;
                }

            }
}

由于上面的代码不仅访问当前纹理坐标,而且还使用指定的内核大小访问它周围的值,glsl如何注意没有其他并行进程访问相同的纹理坐标。 那个问题,上面的代码是否在片段着色器中有效地执行,因为它访问相邻的纹理数据或更好地使用openCL? 谢谢

0 个答案:

没有答案