Pregunta

¿Alguien sabe cómo crear una textura con un espacio de color YUV para que podamos obtener conversión de espacio de color YUV a RGB basado en hardware sin tener que usar un sombreador de fragmentos? Estoy usando una NVidia 9400 y no veo una extensión GL obvia que parezca hacer el truco. He encontrado ejemplos de cómo usar un sombreador de fragmentos, pero el proyecto en el que estoy trabajando actualmente solo admite OpenGL 1.1 y no tengo tiempo para convertirlo a 2.0 y realizar todas las pruebas de regresión necesarias. Esto también está dirigido a Linux. En otras plataformas he estado usando una extensión MESA pero no funciona en la tarjeta Nvidia.

¿Fue útil?

Solución

Dado que está de acuerdo con el uso de extensiones, pero le preocupa ir con OpenGL 2.0, considere proporcionar un sombreador de fragmentos simple con la extensión ARB_fragment_program de la vieja escuela.

Alternativamente, puede usar una biblioteca como DevIL, ImageMagick o FreeImage para realizar la conversión por usted.

Otros consejos

¿la extensión MESA que menciona es para YCrCb? Si su tarjeta nvidia no la expone, significa que no expuso el soporte para ese formato de textura (es la forma de decir que la tarjeta lo admite).

Su única opción es hacer la conversión de color fuera del bloque de filtrado de textura. (antes de enviar los datos de textura a GL, o después de extraer los valores del bloque de filtrado de textura)

GL todavía puede ayudar, ya que hacer la transformación lineal es factible en GL1.1, siempre que tenga las extensiones correctas (extensión del combinador de texturas dot3). Dicho esto, está lejos de ser la panacea.

Por lo que vale, la implementación BINK parece que está haciendo la conversión con la CPU , usando MMX (aunque eso es leer entre líneas). Probablemente haría lo mismo, convirtiendo con SSE antes de cargar a OpenGL. Una CPU es lo suficientemente rápida como para hacer esto en cada cuadro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top