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

标签 java android multithreading libgdx

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

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

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

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

是否可以在线程的帮助下以某种方式复制 GL 上下文或保存它并在稍后的时间生成像素图?当然复制/保存操作要立即完成,否则我不惜一切代价。

我使用 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/

相关文章:

在 ADT Mac Bundle 中创建第一个 Android 应用程序时出现 java.lang.NullPointerException

java - Spring Batch - 有没有办法创建既不读取也不写入的存储过程步骤?

android - 如何通过android端编码使用firebase发送通知?

javascript - 在 Phonegap 和 WebIntent 中使用 Android 推送通知

c# - 如果我在下面的代码中重用现有的互斥体,为什么会得到一个新创建的互斥体?

java - Volley GET 并将 JSONObject 请求发布到 TextView 中的 API View

java - 在文本文件中找到15个最常见的单词-Java

android - 如何更新 android ListView 中的特定列表项

.net - 为什么在分配大量内存时我的线程化 .Net 应用程序不能线性扩展?

c - 多线程应用程序在 printf 中挂起?