Pau*_*ner 5 opengl performance glsl histogram depth-buffer
我正在使用当前上下文的深度缓冲区来影响我正在显示的纹理.纹理是1维的并且是灰度的.从左到右代表从近到远.在一定深度处的像素越多,纹理在该点处越亮,黑色没有像素在该深度处,并且白色是所有像素都在该深度处.
现在我有一个glReadPixels()
深度缓冲区的解决方案,在CPU上进行分析,然后将其写回纹理.当然,这是应用程序中的真正瓶颈.
我正在寻找一个全GPU解决方案,在着色器或某些东西中分析深度缓冲区并以这种方式更新纹理.我考虑创建一个片段着色器,它读取深度值并增加到纹理中的相应像素,但这需要片段着色器可以写入其他纹理.我学到的东西是禁忌,特别是如果他们必须写同一个像素.
有没有我缺少的技巧或技术,或者我被迫参与CPU?
作为@Tommy 提案的升级,我建议使用 PBO 而不是顶点纹理获取:
幸运的是,有一个技巧:顶点着色器也可以对纹理进行采样。所以你可以发出很多GL_POINTS,每个GL_POINTS对应于深度纹理中的一个单独的片段,然后在顶点着色器中你可以从深度纹理中读取以确定点的变换位置。在片段着色器中,只需为点绘制一个具有合适 alpha 的值即可引起您想要的累积。
因此,顶点着色器读取一个纹理,片段着色器不读取任何纹理,并且您使用正常的渲染到纹理机制来写入直方图。