【问题标题】:Loading textures at random place在随机位置加载纹理
【发布时间】:2011-11-14 00:20:23
【问题描述】:

我正在尝试在我的游戏场景的构造函数中同时加载所有游戏数据。但它失败了,因为纹理加载仅在 opengl 上下文中有效,例如从 draw frame 或 surfacechanged 调用的加载方法。但是我认为在第一次调用并条框或类似的东西时加载纹理很难看。那么是否有可能以某种方式将我的加载部分与 opengl 函数分开?

【问题讨论】:

    标签: android opengl-es


    【解决方案1】:

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

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

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

    但是,如果您想预加载所有纹理,您可以在 onSurfaceCreatedonSurfaceChanged 中执行此操作

    这同样适用于缓冲区。

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

    【讨论】:

      【解决方案2】:

      但我认为在第一次调用并条框或类似的东西时加载纹理很难看。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-15
        • 1970-01-01
        • 2011-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-22
        相关资源
        最近更新 更多