Хочу написать простой движек для обоев, с использованием NDK. Opengl контекст управляется и создается на стороне Java, но рендеринг посредством JNI осуществляется на стороне C++.
Возникла проблема: в превью режиме обои отображаются как нужно, но при применении на домашнем экране часть графики пропадает. Думаю, что это связано с тем, что нативная часть обойки является статической библиотекой, по этому к ней имеют доступ несколько потоков. Поток из превью режима не корректно завершается и мешает потоку который отображает обои на домашнем экране.
В логе видно, как несколько потоков мешают друг другу:
TID
17422 : MyService.onCreateEngine() -> com.android.gl2jni.MyService$MyGLEngine@5f0acb6
17422 : MyGLEngine.onVisibilityChanged(true)
17732 : MyRender.onSurfaceCreated()
17732 : MyRender.onSurfaceChanged()
17422 : native.onResume()
17422 : MyGLEngine.onVisibilityChanged(false)
17422 : native.onPause()
17732 : native.resize(1080, 1920)
17732 : native.setupGraphics(1080, 1920)
17422 : MyGLEngine.onVisibilityChanged(true)
17422 : native.onResume()
17732 : MyRender.onSurfaceChanged()
17732 : native.resize(1080, 1920)
17422 : MyService.onCreateEngine() -> com.android.gl2jni.MyService$MyGLEngine@2a46924 (В этом месте жмем кнопку применить)
17422 : MyGLEngine.onVisibilityChanged(true)
17422 : native.onResume()
17422 : MyGLEngine.onVisibilityChanged(false)
17422 : native.onPause()
17869 : MyRender.onSurfaceCreated()
17869 : MyRender.onSurfaceChanged()
17869 : native.resize(1080, 1920)
17869 : after glUseProgram() glError (0x501)
17422 : MyGLEngine.onVisibilityChanged(false)
17422 : native.onPause()
17422 : MyGLEngine.onVisibilityChanged(true)
17422 : native.onResume()
17869 : MyRender.onSurfaceChanged()
17869 : native.resize(1080, 1920)
17869 : after glUseProgram() glError (0x501)
17869 : after glUseProgram() glError (0x501)
...
17869 : after glUseProgram() glError (0x501)
17869 : after glUseProgram() glError (0x501)
17422 : MyGLEngine.onDestroy()
17869 : after glUseProgram() glError (0x501)
17869 : after glUseProgram() glError (0x501)
...
Вопрос как корректно завершить поток из превью режима? Код живых обоев можно посмотреть тут ссылка на github
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости