这可能是一个微不足道的问题。 我很好奇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? 谢谢