2

我正在尝试Mesh在加载屏幕期间为我的 libGDX 游戏预加载我的对象。我已经按照这里关于编写我自己的加载程序的过程进行了操作。所以我基本上复制了 libGDXPixmapLoader并调用了它MeshLoaderMesh唯一的问题是,因为它是异步的,所以 OpenGL 上下文在创建时不可用。有谁知道我如何异步加载 a Meshwith AssetManager?我已经成功地使用了SynchronousAssetLoader而不是,AsynchronousAssetLoader但这会导致我的加载屏幕出现延迟。有任何想法吗?

4

1 回答 1

2

请参阅 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 时完全异步加载 Mesh,因为后者不是 openGL 资产。

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

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

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

于 2012-12-27T23:00:08.437 回答