2010-08-26 101 views
1

我正在编写代码,允许用户浏览SD卡上的文件以定位图像,并使用openGL ES 2.0加载它们。当我只使用EditText键入文件路径时,这很好,但现在我已经实现了一个文件浏览器,该文件浏览器使用与我获得的文件路径字符串完全相同的调用“在没有当前上下文的情况下调用openGL API “在LogCat中。从活动返回时没有当前的openGL上下文吗?

我认为这与加载器活动超过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(); 
    } 

中的文件里面的主要活动,其中包含了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); 
      }}); 
+0

是否使用多线程 – 2010-08-26 21:49:06

+0

我只是用它扩展GLSurfaceView类,所以我猜想以后会自动将渲染器从用户界面中分离出来,是的。 但是除了我还没有创建任何我自己或任何其他线程。 – Frank 2010-08-26 21:53:18

回答

2

从GLSurfaceView文档:

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

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

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

+0

谢谢你的回应,我一直在寻找一个这样的例子。我目前正在浏览提供的丰富信息,但我仍然有点不确定为什么我的代码无法正常工作。 我特别确定要等到返回到保存我的GLSurfaceView的Activity后才能进行任何openGL调用,以确保上下文就位。 你能否给我提供一个小例子?我不在乎丢失纹理或类似的东西,只要确保在上下文重新就位后调用加载新纹理即可。 – Frank 2010-08-27 17:14:32

+0

通过代码挖掘需要一点时间,但谢谢。这导致我找到了解决方案。 – Frank 2010-08-28 16:20:23

+0

很高兴你能工作。不幸的是,我没有可以与您分享的独立代码示例。 – 2010-08-30 02:00:46

相关问题