cocoa – 如何从CVDisplayLink回调中绘制到NSView图形上下文?

cocoa – 如何从CVDisplayLink回调中绘制到NSView图形上下文?,第1张

概述我有一个简单的游戏,将2D图形渲染到帧缓冲区(不使用任何OpenGL).我打算使用CVDisplayLink来获得干净的帧速率,但是Web上的大多数示例都涉及OpenGL或QuickTime. 到目前为止,我有一个NSView的子类: @interface GameView : NSView {@private CVDisplayLinkRef displayLink;}- (CV 我有一个简单的游戏,将2D图形渲染到帧缓冲区(不使用任何OpenGL).我打算使用CVdisplaylink来获得干净的帧速率,但是Web上的大多数示例都涉及OpenGL或QuickTime.

到目前为止,我有一个NSVIEw的子类:

@interface GameVIEw : NSVIEw {@private    CVdisplaylinkRef displaylink;}- (CVReturn)getFrameForTime:(const CVTimeStamP*)outputTime;@end

我设置了CVdisplaylink回调

CVdisplaylinkSetoutputCallback(displaylink,MydisplaylinkCallback,self);

我有回调函数:

CVReturn MydisplaylinkCallback (CVdisplaylinkRef displaylink,const CVTimeStamp *inNow,const CVTimeStamp *inOutputTime,CVOptionFlags flagsIn,CVOptionFlags *flagsOut,voID *displaylinkContext){    CVReturn error = [(GameVIEw*)displaylinkContext getFrameForTime:inOutputTime];    return error;}

我陷入困境的部分是在getFrameForTime中做什么:在GameVIEw中绘制图形上下文.我的第一个猜测是绘制方式与drawRect相同:

- (CVReturn)getFrameForTime:(const CVTimeStamP*)outputTime{    CGContextRef ctxCurrent = [[NSGraphicsContext currentContext] graphicsPort];    //.. Drawing code follows}

但是ctxCurrent是零,我认为我理解 – 通常在drawRect之前有一些设置:使你的视图成为当前的上下文.我认为这是我缺少的部分.如何获取我的视图的上下文?

或者我是否以错误的方式解决这个问题?

解决方法 您可以将绘图代码留在-drawRect:然后在MydisplaylinkCallback()中将ivar设置为当前时间并在视图上调用-display.这将强制您的视图立即重绘自己.

在-drawRect:方法中,只需使用时间ivar的值来执行为当前动画帧适当更新视图所需的任何绘图.

总结

以上是内存溢出为你收集整理的cocoa – 如何从CVDisplayLink回调中绘制到NSView图形上下文?全部内容,希望文章能够帮你解决cocoa – 如何从CVDisplayLink回调中绘制到NSView图形上下文?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1010059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存