Можно ли рисовать на SurfaceTexture, прикрепленном к камере?

Я хочу рисовать поверх SurfaceTexture, который подключен к Camera через setPreviewTexture. Я могу получить SurfaceTexture за SurfaceTextureListener. Но если я просто попытаюсь использовать eglCreateWindowSurface и eglMakeCurrent, это не удастся из-за того, что поверхность уже подключена.

1) Можно ли вообще рисовать на этой поверхности? Или привязка к камере делает это невозможным.

2) Если это невозможно. Можно ли быстро использовать (или копировать) поверхность в текстуру OpenGL и использовать ее на отдельной поверхности? Если да, то как?

3) Если нет, то какой самый быстрый способ получить предварительный просмотр камеры из SurfaceTexture в OpenGL?

Также обратите внимание, что код, из-за которого у меня возникла ошибка, связанная с уже установленным подключением, был вдохновлен публикацией Ромена Гая здесь: http://groups.google.com/group/android-developers/browse_thread/thread/539457146a401cf1


person Grimmace    schedule 20.12.2011    source источник


Ответы (1)


Да, это возможно, на самом деле весь смысл SurfaceTexture. Проблема была в том, что я думал о них наоборот. Для того, чтобы заставить их работать, вам необходимо:

1) Create a texture through OpenGL.
2) Pass this texture to the constructor of new SurfaceTexture.
3) Give this new SurfaceTexture to the camera.
4) Make sure you are using OES_External (see documentation for
details).

Моя самая большая проблема заключалась в том, чтобы понять, как сделать обратное. То есть создайте SurfaceTexture и передайте его в OpenGL. Но правильный способ сделать наоборот.

person Grimmace    schedule 03.01.2012
comment
Интересно, спасибо. Как вы создали контекст EGL в первую очередь для создания текстуры OpenGL? У вас есть GLSurfaceView? Спасибо. - person user1906; 30.04.2014
comment
Здесь пользователь1906 публикует свой вопрос и получает ответ: stackoverflow.com/a/23380229/199364 - person ToolmakerSteve; 06.01.2017