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