openGL存储纹理多长时间?
离开活动时纹理内存是否会被回收?
例如,如果我有以下代码:
mGL.glGenTextures(1, mTextures, 0);
mGL.glBindTexture(GL10.GL_TEXTURE_2D, mTextures[0]); // A bound texture is
// an active texture
//mGL.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, bitmap.getWidth(),bitmap.getHeight(), 0, GL10.GL_RGBA, GL10.GL_FLOAT, textures);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0,GL10.GL_RGBA, bitmap, 0);
// create nearest filtered texture
mGL.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_LINEAR); // This is where the scaling algorithms are
mGL.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR); // This is where the scaling algorithms are
mGL.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
GL10.GL_CLAMP_TO_EDGE);
mGL.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
GL10.GL_CLAMP_TO_EDGE);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
//bitmap.recycle();
Log.v("GLSurfaceView", "Loading Texture Finished");
return mTextures[0];
哪些更改会使返回值无效?
当我回到活动中时(我说这个人打过电话),我不想重新加载所有纹理,因为它确实减慢了速度.
更新:
在Renderer文档中找到此信息,该文档确认了@svdree下面给出的答案:
EGL上下文丢失在某些情况下,EGL渲染上下文将丢失.这通常发生在设备进入睡眠状态后唤醒时.当EGL上下文丢失时,将自动删除与该上下文关联的所有OpenGL资源(例如纹理).为了保持正确渲染,渲染器必须重新创建它仍然需要的任何丢失的资源.onSurfaceCreated(GL10,EGLConfig)方法是一个方便的地方.
这意味着纹理与EGL上下文相关
自发布此问题以来,我尝试通过让我的活动从具有对自定义GLRenderer的引用的基本活动继承来解决问题.基本上,我可以向前传递OpenGLSurface View(即使它在一个活动中实例化并在下一个活动中使用它),但是一旦它通过其关闭程序,它就不会再次启动.
我还发现,使您的活动透明可以保留透明活动下面的openGL上下文(这是有道理的,但仅对菜单等有帮助).但是我想在openGL活动之后总是可以进行所有活动,只需要透明一点,从而在所有活动中保留背景纹理(这可能就是我要做的)