Android — получение ANativeWindowBuffer из ANativeWindow_Buffer

Чтобы получить быстрый доступ к пикселям текстуры OpenGL ES 2.0 на Android NDK, я хочу использовать eglCreateImageKHR() расширение.

Согласно EGL_NATIVE_BUFFER_ANDROID документы:

Это расширение позволяет использовать буфер окна Android (структура
ANativeWindowBuffer) как EGLImage источник.

ANativeWindowBuffer это внутренний struct используется родными рамочными классами, такими как GraphicBuffer,
К сожалению, так как я нахожусь на NDK, у меня нет прямого доступа к этим классам.

НДК native_window Интерфейс позволяет мне передать Java Surface объект через к NDK. Я могу тогда использовать ANativeWindow_fromSurface() получить непрозрачный ANativeWindow* справиться. С этим указателем я могу позвонить ANativeWindow_lock() заполнить структуру типа ANativeWindow_Buffer (Обратите внимание _).

Если я попытаюсь использовать это &ANativeWindow_Buffer объект с eglCreateImageKHR() это терпит неудачу с EGL_BAD_NATIVE_WINDOW,

Мой вопрос: как я могу использовать ANativeWindow_Buffer с eglCreateImageKHR() или как получить ANativeWindowBuffer от ANativeWindow_Buffer или из ANativeWindow*,

5

Решение

Из того, что я понял, когда шел по этой дороге, ANativeWindow_Buffer а также ANativeWindowBuffer совершенно разные типы. Ну, они несколько похожи, но определенно настолько отличаются, что их нельзя использовать взаимозаменяемо.

Если вы хотите сравнить, вот определения:

Вы заметите, что у них есть несколько общих полей (width, height, stride, format). Большая разница в том, что ANativeWindow_Buffer содержит указатель на фактические данные, в то время как ANativeWindowBuffer содержит непрозрачную ручку типа buffer_handle_t,

Так что, если вы узнали, как получить ANativeWindow_Bufferи надеялись, что вы уже на пути к ANativeWindowBufferВы … вероятно нет. По крайней мере, таков был мой вывод. Я думаю, что очень похожие имена просто дразнят.

Я не нашел способ создать ANativeWindowBuffer из кода НДК. По крайней мере, с использованием только поддерживаемых API, я считаю, что это невозможно. Мое исследование было с KitKat.

4

Другие решения


По вопросам рекламы [email protected]