Mam prostą grę, która renderuje grafikę 2D do bufora ramki (nie używając żadnego OpenGL). Miałem zamiar użyć CVDisplayLink, aby uzyskać czysty framerate, jednak większość przykładów w Internecie dotyczy OpenGL lub QuickTime.Jak narysować kontekst graficzny NSView z poziomu wywołania zwrotnego CVDisplayLink?
Do tej pory mam klasy sub NSView:
@interface GameView : NSView {
@private
CVDisplayLinkRef displayLink;
}
- (CVReturn)getFrameForTime:(const CVTimeStamp*)outputTime;
@end
I skonfigurować zwrotnego CVDisplayLink:
CVDisplayLinkSetOutputCallback(displayLink, MyDisplayLinkCallback, self);
I mam funkcję callback:
Część, w której utknąłem, to co zrobić w getFrameForTime:
, aby narysować kontekst graficzny w GameVi ew. Moje pierwsze przypuszczenie było wykonać rysunek ten sam sposób, jak w drawRect:
- (CVReturn)getFrameForTime:(const CVTimeStamp*)outputTime
{
CGContextRef ctxCurrent = [[NSGraphicsContext currentContext] graphicsPort];
//.. Drawing code follows
}
Ale ctxCurrent
jest nil
który myślę, że rozumiem - zwykle jest jakaś konfiguracja, co dzieje się przed drawRect:
sprawia, że Twój widok bieżącego kontekstu. Myślę, że to jest ta część, której mi brakuje. Jak uzyskać kontekst dla mojego widoku?
Czy robię to wszystko na wszystkie złe sposoby?
Dzięki, to działa i wydaje się być najczystszym z dotychczas znalezionych. – John