Android Activity 生命周期和 OpenGL ES 2.0(VBO、着色器等)

标签 android opengl-es android-activity

你能描述一下我什么时候应该重新创建 vbos、着色器、纹理吗?我知道 OpenGL 函数是在单独的线程中调用的。我在Activity的onResume中调用了GLSurfaceView的onResume方法(与onPause方法相同)。 什么时候 GLContext 丢失了? 让我们假设用户触摸主页按钮。 Activity 的 onPause 方法被调用。我应该删除 vbo、着色器、纹理吗?或者我应该在调用 onDestroy 时删除那些资源(恢复 GL 线程以删除它们?)?如果用户触摸后退按钮怎么办? 另一个问题。我应该在 Java 中保留位图、顶点属性以重新初始化 VBO、纹理吗? 现在,每次调用 Activity 的 onPaused 方法时,我都会删除所有着色器、vbos 和纹理。我向事件队列发送一个特殊事件。在 onSurfaceCreated 中,我重新初始化所有资源。它可以工作,但速度不快,而且会消耗大量内存。有更好的解决方案吗?

最佳答案

只要您使用的是 GLSurfaceView ,就不必担心 OpenGL 资源被删除。每次用户单击主页按钮/后退按钮时,EGL 上下文和与该上下文关联的所有资源(纹理、VBO、着色器)都将被删除。因此,您有责任在 onSurfaceCreated() 方法中创建它们。 此外,我不认为删除 onDestroy() 中的资源会起作用,因为那里没有可用的有效 EGL 上下文。

关于Android Activity 生命周期和 OpenGL ES 2.0(VBO、着色器等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17908210/

相关文章:

android - 使用RandomAccessFile直接从文件读取时,音频样本中的变化?

java - 如何在ListView中存储ID并在android java中显示类似<option value ="id">data</option>的数据

android - ImageView 作为单元格中的背景

opengl - 带有 EGL 的 Vulkan 接头

java - Android API 22加载错误

java - 如何从 cordova 插件的服务中访问 Activity ?

java - 将 Java 文件添加到 Android 应用程序

ios - iOS游戏开始时的输入延迟

android - 在android中将字节数组转换为位图有什么错误? (字节数组是从 c/c++ 服务器发送的,android 是客户端)

android - 如何判断是否出现了新的 Activity ?