2009-09-04 16 views
12

Para la representación tengo un contexto GL actual asociado a una ventana. En el caso en que la aplicación renderiza escenas múltiples (por ejemplo, usando acumulación o diferentes ventanas gráficas), creo que está bien reutilizar el mismo contexto.Por qué utilizar el contexto de OpenGL múltiple

Mi pregunta es, ¿por qué debería usar múltiples contextos GL? Leí en la especificación de la extensión ARB_framebuffer_object que las llamadas a MakeCurrent pueden ser costosas, y en el caso de que la extensión ARB_framebuffer_object esté presente, puedo renderizar en un buffer genérico sin usar MakeCurrent.

Aparentemente, la única razón para usar el contexto GL múltiple es evitar configurar el estado del contexto (almacenamiento de píxeles, transferencia, tamaño de punto, polígono punteado ...) o tener disponible la configuración de múltiples almacenamientos intermedios (un contexto con acumulación, otro sin). ¿Cómo debería decidir cuándo es mejor utilizar un contexto alternativo en lugar de establecer el estado del contexto?

Respuesta

11

Normalmente tiendo a utilizar contextos adicionales solo cuando es absolutamente necesario, como la representación en varias ventanas de la GUI. Para todo lo demás, uso objetos framebuffer o cambios de estado.

Sin embargo, las recomendaciones de rendimiento de este tipo no se aplican a todos los casos. En caso de duda, debe medir su propia aplicación en su propio hardware. gDEBugger podría ayudar, hay una versión de prueba disponible.

2

En programas de GUI puede tener varias vistas de OpenGL, donde algunas de ellas se ejecutan en el mismo subproceso que la GUI y otras ejecutan en su propio subproceso. Además, puede ejecutar OpenGL en modo fuera de pantalla. Al menos un contexto por hilo.

No estoy seguro de si tiene sentido tener más contextos por subproceso.

4

Si desea direccionar varias GPU, debe usar contexto múltiple ya que tiene al menos una dibujable por GPU, con un contexto específico de la GPU.

6

IIRC, objetos como texturas y objetos de memoria intermedia se pueden compartir entre contextos, por lo que técnicamente podría crear un segundo contexto en un segundo subproceso y cargar las texturas de forma asincrónica, sin preocuparse de si el primer subproceso realiza la representación.

Cuestiones relacionadas