【发布时间】:2014-12-24 11:36:42
【问题描述】:
我正在开发一个 Android 应用程序,该应用程序在相机视图上执行 OpenCL/OpenGL 互操作。我正在使用 GLSurfaceView.Renderer。自然地,创建和初始化 OpenCL 运行环境(来自 OpenGL)的代码是从 onSurfaceCreated 调用的,每个预览帧的实际处理都发生在 onDrawFrame 中。
一切正常,除了我完成后,我想清理 OpenCL 的东西。理想情况下,onSurfaceDestroyed 方法将是清理的理想场所,但there is no such method in GLSurfaceView.Renderer。所以清理代码无处可去,我的应用程序可能存在内存泄漏。
这是我的问题:
为什么GLSurfaceView.Renderer中没有onSurfaceDestroyed方法?有 onSurfaceCreated 和 onSurfaceChanged。人们会期望 onSurfaceDestroyed 在那里。
鉴于 GLSurfaceView.Renderer 中不存在 onSurfaceDestroyed,我的清理代码应该放在哪里,为什么?
【问题讨论】:
-
可能是因为 openGL 的东西被自动销毁了?
-
但这并不妨碍提供回调方法,不是吗?
-
@hubeir ,不,但您需要实现自己的渲染器,然后处理 EGLContext/Surface 创建。
-
@harism,你能提供更多细节吗?我没有完全关注你。
标签: android opengl-es opencl glsurfaceview