从活动返回时没有当前的openGL上下文?

时间:2010-08-26 21:42:27

标签: android opengl-es

我正在编写代码,允许用户浏览SD卡上的文件以查找图像,然后使用openGL ES 2.0加载它们。当我只使用EditText键入文件路径时,这很好用,但现在我已经实现了一个文件浏览器,它使用文件路径的字符串进行完全相同的调用我得到“调用openGL API而不使用当前上下文“在LogCat中。

我认为这与GLSurfaceView上方的加载器活动有关,因此我设置该活动在任何openGL调用之前终止,但没有骰子。

是什么给出了?

以下是一些代码段:

当用户点击装载程序中的文件时调用

    public void backOut(String filePath) {
        // inform the main Activity of the file to load...
        Intent i = new Intent();
        i.putExtra("filePath", filePath);

        setResult(Activity.RESULT_OK, i);
        // ... and end the load activity
        finish();
    }

在主Activity中,它包含GLSurfaceView

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) {     
  super.onActivityResult(requestCode, resultCode, data); 
  switch(requestCode) { 
    case (1) : { 
      if (resultCode == Activity.RESULT_OK) { 
      String toLoad = data.getStringExtra("filePath");
      Log.v(TAG, toLoad);
      gl.informRendererLoadTexture(toLoad);
      } 
      break; 
    } 
  } 
}

在GLSurfaceView

 public void informRendererLoadTexture(String filePath){
     _filePath = filePath;
     queueEvent(new Runnable(){
            public void run() {
                _renderer.loadGLTexture(_filePath);
            }});

1 个答案:

答案 0 :(得分:2)

来自GLSurfaceView文档:

“有些情况会导致EGL渲染上下文丢失。这通常发生在设备进入睡眠状态后唤醒。当EGL上下文丢失时,与该上下文关联的所有OpenGL资源(如纹理)将会为了保持正确的渲染,渲染器必须重新创建它仍然需要的任何丢失的资源.onSurfaceCreated(GL10,EGLConfig)方法是一个方便的地方。“

您需要了解丢失的OpenGL上下文,然后重新获取上下文并重新加载所有OpenGL资源。当您显示全屏文件浏览器时,看起来您的上下文正在丢失。

您可以查看副本岛上有关检测和处理丢失的上下文的示例代码:http://code.google.com/p/replicaisland/