Чтобы получить быстрый доступ к пикселям текстуры 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*
,
Из того, что я понял, когда шел по этой дороге, ANativeWindow_Buffer
а также ANativeWindowBuffer
совершенно разные типы. Ну, они несколько похожи, но определенно настолько отличаются, что их нельзя использовать взаимозаменяемо.
Если вы хотите сравнить, вот определения:
ANativeWindow_Buffer
: http://androidxref.com/4.4.4_r1/xref/prebuilts/ndk/current/platforms/android-18/arch-arm/usr/include/android/native_window.hANativeWindowBuffer
: http://androidxref.com/4.4.4_r1/xref/system/core/include/system/window.hВы заметите, что у них есть несколько общих полей (width
, height
, stride
, format
). Большая разница в том, что ANativeWindow_Buffer
содержит указатель на фактические данные, в то время как ANativeWindowBuffer
содержит непрозрачную ручку типа buffer_handle_t
,
Так что, если вы узнали, как получить ANativeWindow_Buffer
и надеялись, что вы уже на пути к ANativeWindowBuffer
Вы … вероятно нет. По крайней мере, таков был мой вывод. Я думаю, что очень похожие имена просто дразнят.
Я не нашел способ создать ANativeWindowBuffer
из кода НДК. По крайней мере, с использованием только поддерживаемых API, я считаю, что это невозможно. Мое исследование было с KitKat.