【发布时间】:2011-11-14 00:20:23
【问题描述】:
我正在尝试在我的游戏场景的构造函数中同时加载所有游戏数据。但它失败了,因为纹理加载仅在 opengl 上下文中有效,例如从 draw frame 或 surfacechanged 调用的加载方法。但是我认为在第一次调用并条框或类似的东西时加载纹理很难看。那么是否有可能以某种方式将我的加载部分与 opengl 函数分开?
【问题讨论】:
我正在尝试在我的游戏场景的构造函数中同时加载所有游戏数据。但它失败了,因为纹理加载仅在 opengl 上下文中有效,例如从 draw frame 或 surfacechanged 调用的加载方法。但是我认为在第一次调用并条框或类似的东西时加载纹理很难看。那么是否有可能以某种方式将我的加载部分与 opengl 函数分开?
【问题讨论】:
我也有同样的问题。 我的解决方案是使用proxy textures。这意味着当您使用内存或文件中的某些数据创建纹理时,您正在创建包含该内存数据副本或文件路径的虚拟纹理(您可以将数据预加载到内存中以加快加载速度)。
之后,下次我的渲染器调用 bind()(类似于 glBindTexture)时,我会检查是否有要加载的数据,如果存在,我只需创建新纹理并加载数据。
这种方法最适合我,因为在我的情况下,可以从任何线程和任何时间创建纹理。
但是,如果您想预加载所有纹理,您可以在 onSurfaceCreated 或 onSurfaceChanged 中执行此操作
这同样适用于缓冲区。
另一种方法是使用本机活动(查看 NDK 示例)。在这种情况下,您可以手动处理上下文,但它需要 API 级别 9。
【讨论】:
但我认为在第一次调用并条框或类似的东西时加载纹理很难看。
实际上延迟纹理加载是最优雅的方法。它是允许在不中断加载屏幕的情况下环游世界的游戏的关键要素之一。只是不要试图一次加载整个世界,而是加载东西,一旦它们即将变得可见。使用像素缓冲区对象异步执行操作。
【讨论】: