Dibuje desde un hilo separado con NSOpenGLLayer

Estoy trabajando en una aplicación que necesita dibujar con OpengGL a una frecuencia de actualización al menos igual a la frecuencia de actualización del monitor. Y necesito realizar el dibujo en un hilo separado para que el dibujo nunca esté bloqueado por acciones intensas de la interfaz de usuario.

En realidad estoy usando unaNSOpenGLView en combinación conCVDisplayLink y puedo lograr 60-80FPS sin ningún problema.

Dado que también necesito mostrar algunos controles de cacao en la parte superior de esta vista, traté de subclasificarNSOpenGLView y hacer que esté respaldado por capas, siguiendo LayerBackedOpenGLView Ejemplo de Apple.

El resultado no es satisfactorio y obtengo muchos artefactos.

Por lo tanto, he resuelto el problema usando una @ separaNSWindow para alojar los controles de cacao y agregar esta ventana como una ventana secundaria de la ventana principal que contiene laNSOpenGLView. Funciona bien y puedo obtener el mismo FPS que la implementación inicial.

ado que considero esta solución como un truco sucio, estoy buscando una forma alternativa y más limpia de lograr lo que necesito.

ace unos días me encontré conNSOpenGLLayer y pensé que podría usarse como una solución viable para mi problema.

Entonces, finalmente, después de todo este preámbulo, aquí viene mi pregunta: ¿es posible dibujar a unNSOpenGLLayer de un hilo separado usandoCVDisplayLink ¿llamar de vuelta?

Hasta ahora he intentado implementar esto, pero no puedo extraer de laCVDisplayLink llamar de vuelta. Yo solo puedo-setNeedsDisplay:TRUE sobre elNSOpenGLLayer desde elCVDisplayLink callback y luego realiza el dibujo en-drawInOpenGLContext:pixelFormat:forLayerTime:displayTime: cuando el cacao lo llama automáticamente. Pero supongo que de esta manera estoy dibujando desde el hilo principal, ¿no?

Después de buscar en Google esto, incluso encontréest publicación en la que el usuario afirma que bajo el dibujo de Lion solo puede ocurrir dentro de-drawInOpenGLContext:pixelFormat:forLayerTime:displayTime:.

Estoy en Snow Leopard en este momento, pero la aplicación debería funcionar perfectamente incluso en Lion.

¿Me estoy perdiendo de algo

Respuestas a la pregunta(2)

Su respuesta a la pregunta