2009-04-22 20 views
6

Actualmente estoy cargando una imagen en la memoria en un segundo hilo, y luego durante el ciclo de visualización (si se requiere una carga de textura), cargue la textura.¿Cuál es una buena manera de cargar texturas dinámicamente en OpenGL?

Descubrí que no podía cargar la textura en el segundo hilo porque a OpenGL no le gustaba eso; quizás esto es posible pero hice algo mal, así que por favor corrígeme si esto es realmente posible.

Por otro lado, si mi error fue válido, ¿cómo cargo una textura sin interrumpir el ciclo de representación? Actualmente, las texturas tardan alrededor de 1 segundo en cargarse desde la memoria, y aunque este no es un problema importante, puede ser algo irritante para el usuario.

+0

Parece un tiempo excepcionalmente largo para cargar una textura en VRAM desde la memoria del sistema. ¿Qué tan grande es y tiene OpenGL generando niveles de mipmap para usted? –

+0

Muy grandes, son imágenes médicas. –

Respuesta

4

Puede cargar una textura del disco en la memoria en cualquier hilo que desee, usando cualquier herramienta que desee para leer los archivos.

Sin embargo, cuando lo vincula a OpenGL, tendrá que ser manejado en el mismo hilo que el renderizado para ese contexto OpenGL. Dicho esto, this discussion sugiere que usar una PBO en un segundo hilo es una opción y puede acelerar el proceso.

+0

Primer párrafo no tan útil, tipo de repetir lo que dije jeje;) pero el segundo párrafo parece muy útil, ¡gracias por el enlace! Ciertamente lo comprobaré :) –

+0

Solo digo que lo que estabas haciendo allí es válido - No estaba seguro de cómo lo escribiste, ya sea ese el caso. ¡Buena suerte! –

+0

Entendido. ¡Gracias! :) –

1

Sin duda puede cargar la textura del disco en la RAM en cualquier número de hilos que desee, pero OpenGL no cargará en VRAM en varios hilos por el motivo mencionado en la respuesta de Reed.

Dado que la carga desde el disco es la parte más lenta, esa es la parte que probablemente quiera enhebrar. El (los) hilo (s) de carga crean una cola de texturas que se cargarán, luego esta secuencia es consumida por el hilo que posee el contexto GL (pero tenga en cuenta su acceso a esa cola por los diversos hilos). También podría considerar un enfoque sin subprocesos para cargar N texturas por cuadro, donde N es un número que no desacelera demasiado la renderización.

+0

@Justin, gracias por tomarse el tiempo para responder. Quizás mi pregunta está mal redactada; en la actualidad, la carga de trabajo pesado se realiza en el segundo hilo (esto tarda aproximadamente 10 segundos en cargarse porque hay un poco de procesamiento de imágenes), entonces solo se necesita un breve momento para copiar los píxeles en VRAM durante el ciclo GLUT; sin embargo, aunque es breve, lleva una cantidad de tiempo "incómoda" en términos de experiencia del usuario. –

+0

Okey, tiene sentido: ¡publique aquí una respuesta cuando descubra qué es lo que más le conviene! – Justicle

Cuestiones relacionadas