OpenGL 折叠/缩小实现?

Die*_*Epp 5 arrays opengl functional-programming gpgpu

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

折叠操作示例:

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

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

小智 5

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

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

一个典型的例子是模糊图像。