我正在開發一個Android應用程序,該應用程序在相機每個視圖上執行OpenCL/OpenGL interops。我正在使用GLSurfaceView.Renderer。自然,創建和初始化OpenCL運行環境(來自OpenGL)的代碼是從onSurfaceCreated調用的,並且每個預覽幀的實際處理都發生在onDrawFrame中。爲什麼GLSurfaceView.Renderer中沒有onSurfaceDestroyed方法?
一切正常,除非完成時,我想清理OpenCL的東西。理想情況下,onSurfaceDestroyed方法將是清理的理想場所,但there is no such method in GLSurfaceView.Renderer。所以清理代碼無處可去,我的應用程序中可能存在內存泄漏。
這裏是我的問題:
爲什麼會出現在GLSurfaceView.Renderer沒有onSurfaceDestroyed方法?有onSurfaceCreated和onSurfaceChanged。人們會期望onSurfaceDestroyed在那裏。
鑑於在GLSurfaceView.Renderer中不存在onSurfaceDestroyed,我的清理代碼應該在哪裏,爲什麼?
可能是因爲openGL的東西被自動銷燬? – 2014-10-28 21:40:08
但這並不妨礙提供回調方法,是嗎? – hubeir 2014-10-28 21:43:54
@hubeir,不,但你需要實現你自己的渲染器,然後處理EGLContext/Surface創建。 – harism 2014-10-28 23:44:26