Я работаю над Android-приложением, которое выполняет переходы OpenCL/OpenGL на экране камеры. Я использую GLSurfaceView.Renderer. Естественно, код для создания и инициализации рабочей среды OpenCL (из OpenGL) вызывается из onSurfaceCreated, и фактическая обработка каждого кадра предварительного просмотра происходит в onDrawFrame.Почему нет метода onSurfaceDestroyed в GLSurfaceView.Renderer?
Все работает хорошо, за исключением случаев, когда я закончен, я хочу очистить материал OpenCL. В идеале метод onSurfaceDestroyed будет идеальным местом для очистки, но there is no such method in GLSurfaceView.Renderer. Таким образом, код очистки некуда идти, и, вероятно, утечка памяти в моем приложении.
Вот мои вопросы:
Почему там нет onSurfaceDestroyed метод в GLSurfaceView.Renderer? Есть onSurfaceCreated и onSurfaceChanged. Можно было бы ожидать, что там будетSurfaceDestroyed.
Учитывая тот факт, что в GLSurfaceView.Renderer нет объекта onSurfaceDestroyed, куда должен идти мой код очистки и почему?
возможно, потому что материал openGL получает автоматическое уничтожение? –
, но это не препятствует предоставлению метода обратного вызова, не так ли? – hubeir
@hubeir, нет, но вам нужно реализовать собственный рендер, который обрабатывает создание EGLContext/Surface. – harism