2008-10-18 19 views
5

Necesito renderizar muchas (decenas de miles) imágenes fuera de la pantalla con OpenGL.
Me estoy ejecutando bajo Windows y usando QT como marco. la solución solo puede ser windows, realmente no importa.OpenGL: representación fuera de pantalla rápida

De lo que he encontrado a través de Google hay una serie de opciones para hacer esto This article que parece bastante anticuado sugerir algunas de las formas, de los cuales los más relevantes son:

  • específico de Windows - Uso CreateDIBSection y de alguna manera vinculan la textura a ella.
  • Utilice la extensión pbuffers que parece ser compatible con mi tarjeta.

This thread (mensaje 6) sugiere una forma específica de QT de hacer esto utilizando QGLWidget::renderPixmap

Mi pregunta es - ¿cuál sería la forma 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?


EDITAR: Contestación del comentario -
tengo una escena constante que no cambia en absoluto y estoy haciéndolo 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.

+0

¿De dónde vienen las imágenes? ¿Estás representando la misma escena una y otra vez, tal vez desde diferentes puntos de vista? ¿O estás cargando textura después de la textura del disco? ¿Y a dónde van las imágenes? En un cálculo de GPU? En el disco? Tu respuesta depende de los detalles. – ejgottl

+0

la respuesta a la pregunta – shoosh

+0

Tal vez este enlace puede ser útil, aquí utilicé objetos framebuffer con 'QGLFrameBuffer' http://stackoverflow.com/questions/19934102/qglwidget-and-fast-offscreen-rendering/ – linello

Respuesta

9

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

EDIT: Para un mejor rendimiento, la representación alterna entre dos organizaciones religiosas diferentes:

  1. Render a A
  2. Render a B
  3. leído desde A y procesarla
  4. Render a A
  5. Leer desde B
  6. Ir a 2

De esta forma puede leer un FBO y luego procesarlo mientras la GPU lo renderiza en paralelo.

+0

Sí I' Acabo de leer sobre FBO. alternar entre dos sonidos como una buena idea. ¿Sabes si hay una diferencia entre renderizar en una Textura y renderizar en un RenderBuffer? ¿Cual es mas rápido? – shoosh

+0

Es preferible renderizar en un buffer de render; si puede ser más rápido y ciertamente no será más lento. –

+0

buen enlace PBO http://www.songho.ca/opengl/gl_pbo.html –

Cuestiones relacionadas