在随机位置加载纹理

时间:2011-11-14 00:20:23

标签: android opengl-es

我正试图在我的游戏场景的构造函数中同时加载所有游戏数据。但它失败了,因为纹理加载仅在opengl上下文中起作用,就像从draw frame或surfacechanged调用load方法一样。但我认为在绘制框架首次调用或类似的东西时加载纹理是很难看的。那么有可能以某种方式将我的加载部分与opengl函数分开吗?

2 个答案:

答案 0 :(得分:3)

我有完全相同的问题。 我的解决方案是使用proxy textures。这意味着当您使用内存或文件中的某些数据创建纹理时,您正在创建包含该内存数据或文件路径副本的虚拟纹理(您可以将数据预加载到内存中以加快加载速度)。

之后,下次我的渲染器调用bind()(类似于glBindTexture)时,我会检查是否有要加载的数据,如果它存在,我只需创建新纹理并加载数据。

这种方法最适合我,因为在我的情况下,纹理可以从任何线程和任何时间创建。

但是如果你想预加载所有纹理,你可以在onSurfaceCreatedonSurfaceChanged

中执行此操作

同样适用于缓冲区。

另一种方法是使用本机活动(检查NDK示例)。在这种情况下,您可以手动处理上下文,但它需要API级别9。

答案 1 :(得分:1)

  

但是我认为在绘制框架首次调用或类似的东西时加载纹理是很难的。

实际上,延迟纹理加载是最优雅的方法。它是允许在不中断加载屏幕的情况下环游​​世界的游戏的关键因素之一。只是不要试图立即加载整个世界,而是加载东西,一旦它们即将变得可见。使用Pixel Buffer Objects异步执行操作。