Libgdx异步使用ScreenUtils并且不停止游戏循环

我想要捕捉屏幕。 Libgdx提供了一些在ScreenUtils类中定义的函数。

例如final Pixmap pixmap = ScreenUtils.getFrameBufferPixmap(x, y, w, h);

我的问题是需要大约1-3秒才能获得这些信息。 在此期间,游戏循环被阻止,用户将其定义为滞后。

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

是否有可能复制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


我找到了一个解决方案,在我的情况下工作,因为我只有很小的图形/形状。 基本上我复制了所有绘制到视图的对象,如此处所述。 在后台线程中,我以编程方式生成一个位图,并使用存储在我的对象中的信息绘制位图。

链接地址: http://www.djcxy.com/p/21727.html

上一篇: Libgdx use ScreenUtils asynchronously and don't stop the game loop

下一篇: In Inkscape, how to set the coordinates of a control point by entering numbers?