我几乎是opengl的新手.我想glReadPixels是可怕的,所以最好的方法是什么?我正在考虑使用一个锁定纹理矩形的函数,像glTexSubImage2D一样将像素复制到RAM,修改它,然后使用glTexSubImage2D将ram复制回纹理.这是一个好方法吗?我可以把优化想象成一个标志,说不要复制纹理,因为你将覆盖它并缓存.
我还可以使用其他什么方法?你们有没有人能告诉我我想要的gl函数的名字(所以我可以阅读手册)或者指向我的教程?我尝试使用谷歌搜索,但大多数结果看起来像是没有做我想到的.
glReadPixels是要走的路.
是的,它很慢 - 可怕的慢.但就是这样.DirectX对应物(例如锁定和读取像素)也不是更快.
通常,您希望避免回读像素并对数据上的CPU执行某些操作.您可以使用像素着色器进行相当多的处理,但如果您想要进行屏幕截图(数据必须最终在CPU中),这对您没有帮助.
如前所述glReadPixels是要走的路.读取帧缓冲或更快地访问像素的一种方法是使用ARB_pixel_buffer_object扩展.这将使您可以异步执行glReadPixels,并且当您需要读取大量像素时,性能可以更快.性能可以快得多,因为如果使用"正确"格式,则使用DMA完成传输,并且不会占用宝贵的CPU周期.