我正在编写代码,允许用户浏览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);
}});
答案 0 :(得分:2)
来自GLSurfaceView文档:
“有些情况会导致EGL渲染上下文丢失。这通常发生在设备进入睡眠状态后唤醒。当EGL上下文丢失时,与该上下文关联的所有OpenGL资源(如纹理)将会为了保持正确的渲染,渲染器必须重新创建它仍然需要的任何丢失的资源.onSurfaceCreated(GL10,EGLConfig)方法是一个方便的地方。“
您需要了解丢失的OpenGL上下文,然后重新获取上下文并重新加载所有OpenGL资源。当您显示全屏文件浏览器时,看起来您的上下文正在丢失。
您可以查看副本岛上有关检测和处理丢失的上下文的示例代码:http://code.google.com/p/replicaisland/