有没有办法提高速度glReadPixels?目前我这样做:
Gdx.gl.glReadPixels(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), GL20.GL_RGBA, GL20.GL_UNSIGNED_BYTE, pixels);
问题是它阻止渲染并且很慢.
我听说过Pixel Buffer Objects,但我不确定如何连接它以及它是否更快.
还有其他任何解决方案glReadPixels吗?
基本上,我想尽可能快地截取屏幕截图,而不会阻止下一个场景的绘制.
der*_*ass 17
有没有办法提高glReadPixels的速度?
那么,该操作的速度实际上不是主要问题.它必须将一定量的字节从帧缓冲区传输到系统内存.在具有独立GPU的典型桌面系统中,涉及通过PCI-Express发送数据,并且没有办法解决这个问题.
但正如你所说,隐式同步是一个大问题.如果您需要尽快获得像素数据,那么您实际上并不比同步回读更好.但是,如果您可以在以后获取该数据,则可以通过像素缓冲对象(PBO)进行异步回读.
伪代码是:
GL_PIXEL_PACK_BUFFERglReadPixelsglGetBufferSubData或通过映射PBO进行读取,从PBO回读数据.关键点是第5步的时间安排.我这样做到了早,你仍然阻止了客户端,因为它会等待数据变得可用.对于某些屏幕截图,即使是一帧或两帧也不难延迟该步骤.这样,它只会对整体渲染性能产生轻微影响,并且不会使GPU和CPU停滞.