我要捕获屏幕。 Libgdx提供了ScreenUtils类中定义的一些功能。

例如final Pixmap pixmap = ScreenUtils.getFrameBufferPixmap(x, y, w, h);
我的问题是,获取该信息大约需要1-3秒。在这段时间内,游戏循环被阻塞,用户将其定义为滞后。

在内部ScreenUtils类使用Gdx.gl.glReadPixels。如果我在线程中运行ScreenUtils.getFrameBufferPixmap方法,则不会出现延迟,但是它会以错误的方法捕获屏幕,这是合乎逻辑的,因为游戏循环会运行并更改内容。

是否可以通过Thread在以后的某个时间点复制GL上下文或保存它并生成Pixmap?当然,复制/保存操作应该立即完成,否则我将不遗余力。

我使用ShapeRenderer将我的内容渲染到屏幕上。

最佳答案

经过很少的研究,我发现了更快的替代glReadPixels的方法-像素缓冲区对象,自Android 4.3起可用-https://vec.io/posts/faster-alternatives-to-glreadpixels-and-glteximage2d-in-opengl-es

除了渲染线程外,无法在其他线程上调用glReadPixels-https://stackoverflow.com/a/19975386/2158970

关于java - Libgdx异步使用ScreenUtils并且不停止游戏循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24717228/

10-13 00:09