#android #android-ndk
#Android #android-ndk
Вопрос:
У меня есть некоторый код OpenGL ES, который был отображен в a GLSurfaceView
, и в настоящее время я модифицирую его для работы с любым SurfaceView
и TextureView
.
Общий элемент, который мне нужен из обоих в моем машинном коде, таков: ANativeWindow
.
Для SurfaceView
я получил это, перейдя Surface
к:
m_jwindow = ANativeWindow_fromSurface(env, surface);
Для TextureView
, я беру SurfaceTexture
, и в API 14 я могу использовать это:
m_jwindow = ANativeWindow_fromSurfaceTexture(env, surface);
Однако эта функция была удалена в Jellybean. Что заставляет меня задуматься, как я могу получить ANativeWindow
из SurfaceTexture
API 16 ?
Ответ №1:
Что вам нужно сделать в API 16 , это создать объект Surface, передав SurfaceTexture в качестве аргумента конструктору (который был введен в API 14). Передайте эту поверхность ANativeWindow_fromSurface()
как обычно.
Ответ №2:
Я не знаю, может ли кто-нибудь это увидеть.
во-первых, включите surface_texture.h
используйте ASurfaceTexture_fromSurfaceTexture(JNIEnv *env, jobject surfacetexture)
, чтобы получить ASurfaceTexture*
затем используйте ASurfaceTexture_acquireANativeWindow(ASurfaceTexture *st)
, чтобы получить ANativeWindow*
обязательно отпустите его после того, как все будет сделано. ASurfaceTexture_release(ASurfaceTexture *st)
ссылка: https://developer.android.google.cn/ndk/reference/group/surface-texture