使用AssetManager libGDX加载网格

时间:2012-12-27 19:30:51

标签: java android loading libgdx

我正在尝试在加载屏幕中为我的libGDX游戏预加载Mesh个对象。关于编写自己的加载器,我遵循了进程here。所以我基本上复制了libGDX PixmapLoader并将其称为MeshLoader。唯一的问题是因为它是异步的,所以在创建Mesh时OpenGL上下文不可用。有没有人知道我如何异步加载Mesh AssetManager?我已成功使用SynchronousAssetLoader代替AsynchronousAssetLoader,但这会导致加载屏幕出现延迟。有什么想法吗?

1 个答案:

答案 0 :(得分: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时,无法完全异步加载网格,因为后者不是openGL资产。

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

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

修改   对于那些没有阅读评论的人......如果您使用ObjLoader加载大网格,您可以按照第3条评论中给出的Kieran方法。