2010-06-01 11 views
5

Me preguntaba si era seguro hacer llamadas GL con múltiples hilos. Básicamente estoy usando un GLUtesselator y me preguntaba si podría dividir los objetos para dibujar en 4 y asignarles un hilo a cada uno.¿Es seguro realizar llamadas GL con múltiples hilos?

me pregunto si esto podría causar problemas ya que el tesselator utiliza funciones de devolución de llamada. ¿Pueden los dos subprocesos ejecutar la misma devolución de llamada al mismo tiempo siempre que esa devolución de llamada no acceda a las variables globales hormiga?

¿Hay también otras maneras en que podría optimizar el uso de OpenGL dibujo multihilo?

+0

relacionado https://stackoverflow.com/questions/11097170/multithreaded-rendering-on-opengl –

Respuesta

1

La respuesta a "¿Pueden los 2 hilos de correr la misma devolución de llamada al mismo tiempo, tan larga como la devolución de llamada no tiene acceso a las variables globales de hormigas?" es un claro SÍ.

Sin embargo, obtendrá problemas cuando modifique el estado de OpenGL en sus funciones de devolución de llamada, especialmente cuando use glBegin/glEnd (por ejemplo, si genera una Lista de visualización). Siempre que no uses la GPU (por ejemplo, si usas una malla), puedes hacer la teselación con multihilo.

Si desea optimizar su dibujo, es posible que desee utilizar el sombreado geometría para tesselation lugar. Esto requiere Shader Model 4.

+0

Shader Model 4 es específico de DirectX: http://www.opengl.org/wiki/Detecting_the_Shader_Model. ¿Te refieres a GLSL 1.3? –

+0

De acuerdo, el término correcto es "Unified Shader Model", que se denomina Shader Model 4 en DX. Esto es lo que la tarjeta gráfica debe admitir. El sombreador de geometría OpenGL viene con OpenGL 3.2, GLSL 1.50, pero también puede usarlo como extensión en OpenGL 2.0. – flyx

2

Leyendo entre líneas en su pregunta, la respuesta es no. No se pueden realizar llamadas a un mismo contexto GL de diferentes hilos al mismo tiempo. Puede encontrar más detalles en el Parallel OpenGL FAQ.

Cuestiones relacionadas