java - 使用 AssetManager libGDX 加载网格

标签 java android loading libgdx

我正在尝试在加载屏幕期间为 libGDX 游戏预加载 Mesh 对象。我已经按照流程here关于编写我自己的加载程序。所以我基本上复制了 libGDX PixmapLoader 并将其命名为 MeshLoader。唯一的问题是,由于它是异步的,因此在创建 Mesh 时 OpenGL 上下文不可用。有谁知道如何使用 AssetManager 异步加载 Mesh 吗?我已成功使用 SynchronousAssetLoader 而不是 AsynchronousAssetLoader,但这会导致加载屏幕出现滞后。有什么想法吗?

最佳答案

参见 AssetLoadingTask API,update() 方法(由 AssetManager 使用)

 /*Updates the loading of the asset. In case the asset is loaded with an   
 * AsynchronousAssetLoader, the loaders AsynchronousAssetLoader#loadAsync(AssetManager, String, AssetLoaderParameters) 
 * method is first called on a worker thread. 
 * Once this method returns, the rest of the asset is loaded on the rendering
 * thread via AsynchronousAssetLoader#loadSync(AssetManager, String, AssetLoaderParameters).

因此,在加载 Pixmap 时无法完全异步加载网格,因为后者不是 openGL 资源。

您可以复制TextureLoader,它异步加载像素数据(如像素图),然后在渲染线程上同步创建纹理。

您能做的最好的事情就是异步计算顶点/索引并同步进行绑定(bind)。

编辑 对于那些不阅读评论的人...如果您正在使用 ObjLoader 加载大网格,您可以遵循第三条评论中给出的 Kieran 方法。

关于java - 使用 AssetManager libGDX 加载网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14060200/

相关文章:

java - 如何获取 ScheduledThreadPoolExecutor 中正在执行的作业?

java - Netbeans Java 调试器声称 ((true && false) == true)

javascript - 用百分比预加载 - javascript/jquery

android - 将 Context/Activity 实例保留在 RecyclerView.Adapter 中是否是泄漏安全的?

Android - AccountManager Twitter OAuth,未发现身份验证挑战

c++ - 如何加载自定义字体以便我可以在 DirectX 中使用它们?

javascript - 当 URL 为目录时,JS 文件无法加载

java - 如何使用 JSP 实现此模式

java - 如何在 Spring 测试期间创建 CrudRepository 接口(interface)的实例?

安卓 Espresso Intent