2011-08-30 12 views
5

Estoy creando un reproductor de video OpenGL usando Ffmpeg y todos mis videos no tienen una potencia de 2 (ya que son resoluciones de video normales). Funciona a muy buen fps con mi tarjeta nvidia, pero he descubierto que no se ejecutará en tarjetas ATI antiguas porque no admiten texturas que no sean de potencia de dos.¿Cuán más eficaces son las texturas de potencia de dos?

Solo lo usaré en una tarjeta Nvidia, así que realmente no me importa demasiado el problema de ATI, pero me preguntaba cuánto aumentaría el rendimiento si los cargadores de texto fueran power-of-2 ? ¿Vale la pena rellenarlos?

Además, si vale la pena, ¿cómo hago para rellenarlos con la mayor potencia de dos más cercana?

Respuesta

3

Al escribir un reproductor de video, debe actualizar su contenido de textura usando glTexSubImage2D(). Esta función le permite suministrar imágenes de tamaño arbitrario, que se colocarán en algún lugar de la textura objetivo. De modo que puede inicializar la textura primero con una llamada de glTexImage() con el puntero de datos como NULO, luego complete los datos.

La ganancia de rendimiento de la potencia pura de 2 texturas depende en gran medida del hardware utilizado, pero en casos extremos puede ser de hasta 300%.

+0

Bien, ya estoy usando glTexSubImage2D() como dices, pero cuando inicie la textura con glTexImage2D() debería crearlo como una potencia de dos y luego ordenar las llamadas glTexCoord2f() para mostrar solo el video "parte "de la textura para la máxima eficiencia? –

+0

Depende en gran medida de su implementación OpenGL (leer GPU). Todas las GPU recientes tienen un rendimiento de rendimiento muy pequeño para NPO2 – datenwolf

Cuestiones relacionadas