OpenGL折叠/缩减实现?

时间:2012-10-29 19:09:41

标签: arrays opengl functional-programming gpgpu

我已经弄清楚如何通过使用变换反馈(或渲染到纹理)将高阶函数mapfilter转换为OpenGL代码。我也希望能够使用fold,但我不知道这是如何工作的。让我们假设操作是关联的,所以我不在乎它是左折还是右折或某些不确定的混合。

折叠操作的例子:

  • 计算包含一组点的最小AABB(折叠在顶点数组上)。
  • 计算纹理中最亮的值(折叠纹理)。

或者,如果没有OpenCL或CUDA,这是不可行的吗?

1 个答案:

答案 0 :(得分:3)

如果您的操作是关联的,则可以通过重复渲染到较小的纹理来减少/折叠数据。在每个过程中,您可以组合上一个过程中的多个纹素。您可以通过将其绑定为片段着色器的纹理来读取上一遍中的数据。

例如,如果您想计算128x128值的图像的平均值,您可以首先渲染到64x64的纹理,其中您在目标纹理中的每个纹素的输入纹理中平均4个纹素。

典型的例子是模糊图像。