gpt4 book ai didi

OpenGL 读取像素的速度比 glReadPixels 快

转载 作者:行者123 更新时间:2023-12-03 22:06:47 27 4
gpt4 key购买 nike

有没有办法提高glReadPixels的速度?目前我做:

Gdx.gl.glReadPixels(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), GL20.GL_RGBA, GL20.GL_UNSIGNED_BYTE, pixels);
问题是它会阻塞渲染并且速度很慢。
我听说过 Pixel Buffer Objects,但我不太确定如何连接它以及它是否更快。
除了 glReadPixels 还有其他解决方案吗? ?
基本上,我想尽可能快地截取屏幕截图,而不会阻塞下一个场景的绘制。

最佳答案

Is there a way to increase the speed of glReadPixels?


好吧,该操作的速度实际上不是主要问题。它必须将一定数量的字节从帧缓冲区传输到您的系统内存。在带有独立 GPU 的典型桌面系统中,这涉及通过 PCI-Express 发送数据,并且没有办法解决这个问题。
但正如您已经说过的,隐式同步是一个大问题。如果您尽快需要该像素数据,那么您真的不能比同步回读做得更好。但是,如果您以后可以忍受获取该数据,则可以通过像素缓冲区对象 (PBO) 进行异步回读。
其伪代码是:
  • 创建公益组织
  • 将 PBO 绑定(bind)为 GL_PIXEL_PACK_BUFFER
  • glReadPixels
  • 做点别的。两者都在 CPU 上工作并为 GPU 发出新命令是理想的。
  • 使用 glGetBufferSubData 从 PBO 读回数据或通过映射 PBO 进行读取。

  • 关键点是第 5 步的时间安排。我这样做很早,您仍然阻塞客户端,因为它将等待数据可用。对于某些屏幕截图,即使一两帧延迟该步骤也不难。这样,它只会对整体渲染性能产生轻微影响,并且不会使 GPU 或 CPU 停滞。

    关于OpenGL 读取像素的速度比 glReadPixels 快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25127751/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com