Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Qué hace realmente GPUImage TwoPassFilter?

Estoy intentando volver a crear el GPUImageTwoPassFilter de GPUImage (ios) para Android. Estoy trabajando en el trabajo realizado aquí para un puerto Android de GPUImage. El puerto realmente funciona muy bien para muchos de los filtros. He portado sobre muchos de los shaders, básicamente línea para la línea con gran éxito.

El problema es que para el puerto de algunos de los filtros, tienes que extender desde el GPUImageTwoPassFilter de GPUImage, que el autor de la versión de Android no implementar aún. Quiero tomar una puñalada en la escritura, pero por desgracia la versión iOS es muy indocumentada por lo que no estoy muy seguro de lo que el filtro TwoPass se supone que hacer.

¿Alguien tiene algún consejo para hacer esto? Tengo un conocimiento limitado de openGL, pero muy buen conocimiento de Android e iOS. Im definitivamente buscando una descripción muy psudocode aquí

One Solution collect form web for “¿Qué hace realmente GPUImage TwoPassFilter?”

Supongo que necesito explicar mi pensamiento aquí.

Como indica el nombre, en lugar de simplemente aplicar una sola operación a una imagen de entrada, esto ejecuta dos pasadas de sombreadores contra esa imagen, una tras otra. Esto es necesario para operaciones como los desenfoques gaussianos, donde utilizo un núcleo separable para realizar un pase de desenfoque vertical y luego un horizontal (la textura de cortes lee de 81 a 18 en un desenfoque de 9 impactos). También lo uso para reducir las imágenes a su componente de luminancia para la detección de bordes, aunque recientemente he hecho que los filtros detecten si estaban recibiendo contenido monocromático para que sea opcional.

Por lo tanto, esto amplía la base GPUImageFilter para utilizar dos framebuffers y dos programas de sombreado en lugar de sólo uno de cada uno. En la primera pasada, la representación sucede exactamente igual que con un GPUImageFilter estándar. Sin embargo, al final de eso, en lugar de enviar la textura resultante al siguiente filtro de la cadena, esa textura se toma como entrada para un segundo paso de renderizado. El filtro cambia al segundo programa de sombreado y lo ejecuta contra la primera textura de salida para producir una segunda textura de salida, que finalmente se transmite como la salida de este filtro.

El filtro reemplaza sólo los métodos de GPUImageFilter necesarios para hacer esto. Una cosa difícil de tener en cuenta es el hecho de que corregir la rotación de la imagen de entrada en la primera etapa del filtro, pero la segunda etapa no tiene que girar la imagen de nuevo. Por eso hay una diferencia en las coordenadas de textura usadas para la primera y segunda etapas. Además, los filtros como los desenfoques que muestren en una sola dirección pueden necesitar que sus entradas de muestreo cambien dependiendo de si la primera etapa está girando la imagen o no.

También hay algunas opciones de optimización de la memoria y almacenamiento en memoria caché de sombreado, pero puede ignorarlas de forma segura cuando envíe esto a Android.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.