Я использую TextureView
для отображения графики OpenGL. У меня есть несколько TextureView
экранов. Также у меня много графического контента, такого как спрайты или текстовые глифы, и я не хочу создавать его снова, когда экран переключается. Я обнаружил, что общий контекст EGL может помочь мне.
val surfaceAttributes = intArrayOf(
EGL14.EGL_WIDTH, 1,
EGL14.EGL_HEIGHT, 1,
EGL14.EGL_NONE
)
sharedSurface = EGL14.eglCreatePbufferSurface(display, config, surfaceAttributes, 0)
val contextAttributes = intArrayOf(
EGL14.EGL_CONTEXT_CLIENT_VERSION, 2,
EGL14.EGL_NONE
)
sharedContext = EGL14.eglCreateContext(display, config, EGL14.EGL_NO_CONTEXT, contextAttributes, 0)
Я использую этот контекст и поверхность как глобальные объекты. Когда приложение запускается, я загружаю все необходимые мне ресурсы. Для каждого TextureView я создаю новый EGLContext
с sharedContext
:
val context = EGL14.eglCreateContext(display, config, sharedContext, contextAttributes, 0)
Работает нормально, но есть проблема с утечкой памяти. Я уничтожаю EGLContext
и EGLSurface
, связанные с TextureView
в методе onSurfaceTextureDestroyed
, но графическая память не освобождается после уничтожения объекта TextureView
(я проверил это через Profiler).
Я обнаружил, что вся память освобождается только после уничтожения моей sharedContext
.
Есть ли способ освободить от утечек памяти, чтобы сохранить ресурсы OpenGL (спрайты, глифы) в течение всего срока службы приложений?