【问题标题】:AndEngine GLES2 - avoid reloading Texture onResumeAndEngine GLES2 - 避免重新加载纹理 onResume
【发布时间】:2014-05-08 12:53:55
【问题描述】:

有可能吗?因为 onResume 我得到(示例日志):

I/dalvikvm-heap﹕ Grow heap (frag case) to 19.304MB for 8294416-byte allocation
I/dalvikvm-heap﹕ Grow heap (frag case) to 27.213MB for 8294416-byte allocation
I/dalvikvm-heap﹕ Grow heap (frag case) to 15.257MB for 4052160-byte allocation
I/dalvikvm-heap﹕ Grow heap (frag case) to 17.277MB for 6169216-byte allocation
I/dalvikvm-heap﹕ Grow heap (frag case) to 17.277MB for 6169216-byte allocation
I/dalvikvm-heap﹕ Grow heap (frag case) to 17.277MB for 6169216-byte allocation
I/dalvikvm-heap﹕ Grow heap (frag case) to 17.277MB for 6169216-byte allocation
I/dalvikvm-heap﹕ Grow heap (frag case) to 17.277MB for 6169216-byte allocation
I/dalvikvm-heap﹕ Grow heap (frag case) to 15.192MB for 3983200-byte allocation
I/dalvikvm-heap﹕ Grow heap (frag case) to 19.304MB for 8294416-byte allocation
I/dalvikvm-heap﹕ Grow heap (frag case) to 27.213MB for 8294416-byte allocation
I/dalvikvm-heap﹕ Grow heap (frag case) to 16.059MB for 4892464-byte allocation
I/dalvikvm-heap﹕ Grow heap (frag case) to 19.303MB for 8294416-byte allocation

我认为这是因为纹理、精灵被重新加载,对吧?在中型设备上恢复活动大约需要 10 秒。我想尽可能减少这个时间。

这是正确的做法吗?

【问题讨论】:

    标签: java android opengl-es-2.0 andengine


    【解决方案1】:

    好的,我找到了!

    @SuppressLint("NewApi")
        @Override
        public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback) throws IOException {
            // TODO Auto-generated method stub
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
                mRenderSurfaceView.setPreserveEGLContextOnPause(true);
            }
            initSplashScene();
            pOnCreateSceneCallback.onCreateSceneFinished(this.splashScene);
    
        }
    

    这将防止 openGL 丢失上下文,因此如果您有上下文,那么 openGL 不会重新加载所有纹理。

    但这仅适用于 API 11 >。因此,或者您将最小 API 设置为 11 或对其进行处理。 在我的情况下,如果设备 API

    【讨论】:

    • 我也使用它来保存上下文。如果我在暂停时检测到偏好更改,您知道如何强制重启恢复吗?我已经实现了侦听器,但不知道如何重新启动。
    • @Shakti 你的意思是重启 EGLContext 对吧?如果是,我愿意帮助你,但你必须“提出问题”:)
    【解决方案2】:

    尝试修改BaseGameActivity.java中的onSetContentView()方法 使用此代码 受保护的无效 onSetContentView() {

    this.mRenderSurfaceView = new RenderSurfaceView(this);
    this.mRenderSurfaceView.setRenderer(this.mEngine, this);
    if(android.os.Build.VERSION.SDK_INT >= 11){
        this.mRenderSurfaceView.setPreserveEGLContextOnPause(true);
    }
    this.setContentView(this.mRenderSurfaceView, BaseGameFragmentActivity.createSurfaceViewLayoutParams());
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多