performance - OpenGL: representación rápida fuera de pantalla
3d rendering (1)
Necesito renderizar muchas (decenas de miles) imágenes fuera de la pantalla usando OpenGL.
Me estoy ejecutando bajo Windows y usando QT como marco. la solución solo puede ser windows, realmente no importa.
De lo que he encontrado al usar Google, hay varias opciones para hacerlo. Este artículo, que parece bastante anticuado, sugiere algunas maneras, de las cuales las más relevantes son:
- Específico de Windows: use
CreateDIBSection
y de alguna manera vincule la textura. - Use la extensión pbuffers que parece ser compatible con mi tarjeta.
Este hilo (Mensaje 6) sugiere una forma específica de QT de hacer esto usando QGLWidget::renderPixmap
Mi pregunta es: ¿cuál sería la manera más rápida? pbuffers parece ser la apuesta más segura, ya que se garantiza que se realizará en el hardware pero no está utilizando el método CreateDIB, también pasa por el hardware. ¿Qué hay del método QT? parece que hay un problema de creación de contexto con este. seguramente no me gustaría crear un nuevo contexto para cada imagen que creo.
¿Alguien tiene alguna buena experiencia con esto?
EDIT : respondiendo el comentario -
Tengo una escena constante que no cambia para nada y la represento 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 se procesarán en la GPU.
Use FBO . Es rápido, portátil y mucho más fácil de usar que los pbuffers.
EDITAR: Para un mejor rendimiento, renderizado alternativo entre dos FBO diferentes:
- Renderizar a A
- Renderizar a B
- Leer de A y procesarlo
- Renderizar a A
- Lea de nuevo desde B
- Ir a 2
De esta forma, puede leer un FBO y luego procesarlo mientras el GPU lo renderiza al otro en paralelo.