Red de conocimiento informático - Problemas con los teléfonos móviles - Detalles de textura superficial

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

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