Detalles de textura superficial
SurfaceTexture es una combinación de texturas Surface y OpenGL ES (GLES).
SurfaceTexture contiene un BufferQueue. Luego, la aplicación llama a updateTexImage(), libera el búfer previamente ocupado, obtiene el nuevo búfer de la cola y realiza una llamada EGL para que GLES pueda usar este búfer como una textura externa.
Métodos clave:
constructor SurfaceTexture(int texName, boolean singleBufferMode)
setOnFrameAvailableListener establece una devolución de llamada que se llama cuando el productor está listo para un nuevo marco. El oyente
updateTexImage actualiza la textura al GLESContext especificado
detachFromGLContext
adjuntarToGLContext
Desvincula/vincula el GLContext actual
p>
getTransformMatrix establece la matriz de textura remuestreada, que se usará al renderizar
release() libera completamente el búfer de SurfaceTexture y establece el estado de la superficie en abandono
análisis del código fuente de android-8.0.0_ r1:
explicación del parámetro GLConsumer:
bq es el BufferQueue utilizado para crear BufferConsumer
tex es para transmitir la imagen El nombre de la textura OpenGL ES a la que pertenece.
texTarget especifica la textura que se va a vincular
useFenceSync indica si se requiere acceso sincrónico al búfer
GLConsumer se puede separar del contexto OpenGL ES y luego use detachFromContext y el método adjuntoToContext crea un BufferConsumer para adjuntar un GLConsumer a otro contexto.
Si se establece el parámetro tex, GLConsumer se adjuntará al contexto OpenGL ES a través de addToContext.
La primera llamada a updateTexImage es el primer enlace, todas las llamadas posteriores a updateTexImage deben usar el mismo contexto OpenGL ES actual
adquirirBufferLocked crea un EglImage y lo establece en EglSlots
updateAndAndAnswer es la primera vez que se adjunta un GLConsumer a un contexto OpenGL ES. p>
updateAndReleaseLocked actualiza EglImage
createIfNeeded Crea EglImage cuando EGLDisplay cambia o cambia de recorte
bindToTextureTarget llamará a glEGLImageTargetTexture2DOES para vincular la imagen al objetivo especificado<. /p>
EGLImageKHR creado aquí para disfrutar del recurso EGL
ShareContext de EGL es un método común para disfrutar del contexto (EAGL para la plataforma iOS se llama ShareGroup).
Cuando el parámetro share_context se pasa a otro contexto EGL, dos EGLContexts pueden disfrutar de texturas, VBO, etc.
Tenga en cuenta que los objetos contenedores no se pueden disfrutar, por ejemplo:
objetos Framebuffer
objetos de matriz Vertex
objetos de retroalimentación de transformación p>
Objeto de canalización del programa
Referencia: /project/deep-android-v1/classes.html
EGLImageKHR: https://www.khronos.org/registry/ EGL/extensiones/KHR/EGL_KHR_image_base.txt