Android NDK live wallpaper preview

207
27 марта 2019, 11:10

Хочу написать простой движек для обоев, с использованием 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

READ ALSO
Прочитать массив байт из строки и создать файл изображения

Прочитать массив байт из строки и создать файл изображения

У меня есть файл с изображением который я должен передать как поле String в JSONЯ преобразую файл с изображением

163
Логический тип boolean [закрыт]

Логический тип boolean [закрыт]

Начал изучать java и все никак не могу понять зачем нужен boolean, было приведено много примеров, но это понятие до меня не доходит, кто нибудь обьясните...

124
Проблема маппинга ManyToMany [закрыт]

Проблема маппинга ManyToMany [закрыт]

Есть две ентити Book и Author и есть третья ентити для их связи (id, id-author, id-book)

142
Чем вызвана данная ошибка(TCP socket)?

Чем вызвана данная ошибка(TCP socket)?

Никак не могу понять в чем делоПересмотрел кучу всего на эту тему, но мало чего помогло

145