Tengo un juego simple que representa gráficos 2D en un búfer de cuadros (sin utilizar ningún OpenGL). Iba a usar CVDisplayLink para obtener una tasa de fotogramas limpia, sin embargo, la mayoría de los ejemplos en la web tratan con OpenGL o QuickTime.Cómo dibujar a un contexto de gráficos NSView desde dentro de una devolución de llamada CVDisplayLink?
Hasta ahora tengo una subclase de NSView:
@interface GameView : NSView {
@private
CVDisplayLinkRef displayLink;
}
- (CVReturn)getFrameForTime:(const CVTimeStamp*)outputTime;
@end
Y me juego hasta la devolución de llamada CVDisplayLink:
CVDisplayLinkSetOutputCallback(displayLink, MyDisplayLinkCallback, self);
Y tengo la función de devolución de llamada:
La parte donde estoy atascado es qué hacer en getFrameForTime:
para dibujar en el contexto gráfico en el GameVi ew. Mi primera suposición era para hacer el dibujo de la misma manera que lo haría en drawRect:
- (CVReturn)getFrameForTime:(const CVTimeStamp*)outputTime
{
CGContextRef ctxCurrent = [[NSGraphicsContext currentContext] graphicsPort];
//.. Drawing code follows
}
Pero ctxCurrent
es nil
que creo que entiendo - normalmente hay alguna configuración que ocurre antes de la drawRect:
que hace que su punto de vista el contexto actual. Creo que esta es la parte que me falta. ¿Cómo obtengo el contexto para mi vista?
¿O estoy hablando de esto de las formas incorrectas?
Gracias, esto está funcionando y parece ser el más limpio que he encontrado hasta ahora. – John