Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在GLSL上,获取二进制纹理中哪些位置用1填充的快速算法是什么?_Javascript_Opengl Es_Glsl_Webgl - Fatal编程技术网

Javascript 在GLSL上,获取二进制纹理中哪些位置用1填充的快速算法是什么?

Javascript 在GLSL上,获取二进制纹理中哪些位置用1填充的快速算法是什么?,javascript,opengl-es,glsl,webgl,Javascript,Opengl Es,Glsl,Webgl,我有一个二进制2d纹理: texture = [1,0,0,1, 0,0,1,0, 0,0,0,0, 1,0,0,0]; 我想找出哪些像素坐标是用1填充的。例如,在这种情况下,结果将是: [[0,0], [3,0], [2,1], [0,3]] 因为坐标(0,0)、(3,0)、(2,1)和(0,3)有一个1。我想使用OpenGL ES/GLSL在片段着色器中处理该函数。我设法找到了一个log(N)解决方案。是否可以在着色器的

我有一个二进制2d纹理:

texture = [1,0,0,1,
           0,0,1,0,
           0,0,0,0,
           1,0,0,0];
我想找出哪些像素坐标是用1填充的。例如,在这种情况下,结果将是:

 [[0,0], [3,0], [2,1], [0,3]]

因为坐标
(0,0)、(3,0)、(2,1)和(0,3)
有一个1。我想使用OpenGL ES/GLSL在片段着色器中处理该函数。我设法找到了一个
log(N)
解决方案。是否可以在着色器的一次过程中计算该结果?

您找到的O(对数N)解决方案是什么?我现在可以用
textureGather(…)
想到一个,但这是GL4特性,在ES中不起作用。即使您无法访问
textureGather(…)
@AndonM.Coleman hmm…,您仍然可以利用以下事实:线性纹理过滤一次采集4个样本,并执行加权平均以减少所需的获取次数。。。?我认为pass是1(因为它是并行发生的),所以
log(N)
passs(使用foldl)或
log(N)*N
操作(如果您愿意的话)。我看到的最快的实现是直方图金字塔:,您可以查看log(N)性能。忽略操作的顺序,这完全停留在GPU上的事实应该会使它相当快,但我不认为你会找到一个解决方案,在一个单一的过程中运行,而不是在每个像素上进行非常缓慢的迭代。