我对我的 OpenGL 围绕我的网格的边缘轮廓进行亚像素采样感兴趣,以用于计算机视觉任务。我正在考虑使用 MSAA 来有效地做到这一点(但该应用程序不适用于抗锯齿)。我发现多重采样的问题是,为了从 GPU 读取样本,我只能将帧缓冲区 blit 到非多重采样的帧缓冲区中,因此我无法恢复单个样本信息。我的问题是:
- 有没有办法实现存储每个样本(GL_SAMPLE_SHADING)计算结果的片段着色器,以便我可以将这些样本读回CPU?我曾想过使用 glSampleID 将输出索引到不同的输出缓冲区,但不知道这是否可能。也许像用于 OIT 的链表结构这样的方法(即http://on-demand.gputechconf.com/gtc/2014/presentations/S4385-order-independent-transparency-opengl.pdf)?但是,它们在 GPU 上执行所有计算,所以我不确定是否可以以任何方式从 CPU 读取链表数据。
也许 MSAA 是错误的方法,还有其他方法可以这样做。我想我最后的手段是对渲染 x 次进行超级采样,从而恢复单个样本,但这似乎是一个非常低效的解决方案。