【问题标题】:Libgdx use ScreenUtils asynchronously and don't stop the game loopLibgdx 异步使用 ScreenUtils 并且不停止游戏循环
【发布时间】:2014-07-12 20:55:20
【问题描述】:

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

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

我的问题是获取该信息大约需要 1-3 秒。在此期间,游戏循环被阻塞,用户将其定义为延迟。

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

是否有可能复制 GL 上下文或将其保存并在以后借助线程生成 Pixmap?当然复制/保存操作应该立即完成,否则我什么都不留。

我使用ShapeRenderer 将我的东西渲染到屏幕上。

【问题讨论】:

  • 抱歉,我不是有意投反对票(意外点击),但我无法撤消。

标签: java android multithreading libgdx


【解决方案1】:

经过少量研究,我发现了 glReadPixels 的更快替代方案 - Pixel Buffer Object,自 Android 4.3 起可用 - https://vec.io/posts/faster-alternatives-to-glreadpixels-and-glteximage2d-in-opengl-es

不能在渲染线程以外的其他线程上调用 glReadPixels - https://stackoverflow.com/a/19975386/2158970

【讨论】:

  • 嗯,这可能行得通,但我必须使用 LibGDX 提供的 OpenGL 东西,我不太确定如何连接它。
【解决方案2】:

我找到了一个解决方案,它适用于我的情况,因为我只有较小的图形/形状。基本上我复制了所有被绘制到视图的对象,as described here. 在后台线程中我 generate a Bitmap programmatically 并使用存储在我的对象中的信息来绘制位图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多