我正在尝试在加载屏幕期间为 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/