这可能不太可能,但是是否存在共享全局变量的概念,可以在 Metal 和 OpenGLES 中的片段着色器的每次传递中更新?我想在处理每个像素后更新一些统计信息。我假设每个片段着色器并行运行时会出现很多并发问题。
问问题
473 次
2 回答
2
像 atomic_uint 之类的东西?我最近需要做类似的事情,这就是我使用的。在这里查看我的问题的答案:如何在金属片段着色器中实现/使用原子计数器?
于 2018-02-18T18:15:02.863 回答
1
老实说,片段着色器的原子性能可能很糟糕,因为如果您采用每个输入纹素 1 个片段的幼稚方法,您将从多个着色器核心获得大量并行读取和写入,因为着色器将非常短。
通常的实现是将直方图编码为帧缓冲区。
从顶点着色器中的纹理读取,并在与“直方图”坐标匹配的位置放置一个点。
可以使用混合操作来累积直方图。
使用 glReadPixels 将直方图读回 CPU。
于 2018-02-19T11:54:53.173 回答