我在C ++上使用OpenGL渲染图像,并希望访问生成的图像以对其进行更多处理。 (我正在渲染一个图像,有一个它应该看起来像的实际图像,并且想要计算两者之间的像素差异。)
到目前为止,我只是将图像渲染到屏幕上,但我无法弄清楚如何渲染图像,然后在绘制的直接像素上进行访问。如果我能在屏幕上看到图像,我并不特别在意,我想要的是图像被渲染到我可以从CPU访问的某个内存区域。你是怎么做到的?
或者,是否可以发送它看起来像OpenGL的图像并计算GPU上的像素差异?这两种选择对我来说都没问题,但我能做得越快越好。 (现在,我可以每秒渲染大约100帧,但仍然没有弄清楚如何进行比较。)
答案 0 :(得分:2)
是的,你可以在GPU上完成。将2个图像放在纹理中。使用两个纹理绘制一个框架填充四边形多纹理,并确保提供纹理坐标。编写片段着色器来计算差异。 (当评论者询问您是否要使用可编程管道时,这是其中一个重要原因。如果您只使用固定功能管道,则无法选择编写片段着色器。)
答案 1 :(得分:1)
显而易见的方法是使用glReadPixels
将帧缓冲区中的渲染结果读取到主机内存中。