Pregunta

Necesito renderizar bastante (decenas de miles) imágenes fuera de la pantalla con OpenGL.
Estoy ejecutando bajo Windows y usando QT como marco. La solución solo puede ser Windows, realmente no importa.

De lo que he encontrado usando Google hay varias opciones para hacer esto. Este artículo que parece más bien anticuado sugiere algunas maneras, de las cuales las relevantes son:

  • Específico de Windows: use CreateDIBSection y enlístele la textura de alguna manera.
  • Use la extensión pbuffers que parece que tengo soporte en mi tarjeta.

Este hilo (Mensaje 6) sugiere una QT forma específica de hacerlo usando QGLWidget::renderPixmap

Mi pregunta es: ¿cuál sería la forma más rápida? pbuffers parece ser la apuesta más segura porque se garantiza que se realizará en el hardware, pero ¿no utiliza el método CreateDIB también pasa por el hardware? ¿Qué pasa con el método QT? Parece que hay algún problema de creación de contexto con este. seguramente no querría crear un nuevo contexto para cada imagen que creo.
¿Alguien tiene alguna buena experiencia con esto?


EDIT : respondiendo al comentario -
Tengo una escena constante que no cambia en absoluto y la estoy mostrando desde muchos puntos de vista diferentes. Por ahora las imágenes vuelven al usuario y serán procesadas por la CPU. Posiblemente en el futuro serán procesados ??en la GPU.

¿Fue útil?

Solución

Utilice FBO . Es rápido, portátil y mucho más fácil de usar que los pbuffers.

EDITAR: para obtener el mejor rendimiento, alterne la representación entre dos FBO diferentes:

  1. Renderizar a A
  2. Render to B
  3. Lee de A y procesa
  4. Renderizar a A
  5. Lee de B
  6. Goto 2

De esta manera, puedes volver a leer un FBO y luego procesarlo mientras la GPU se procesa en paralelo.

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