Mic*_*rst 2 opengl cocoa objective-c
我一直试图在Objective-C中使用OpenGL创建一个场景几周,而我似乎无法让它工作.我开始使用绘图到NSOpenGLView类:一个教程,这对我来说很好,我甚至可以稍微扩展它,但是OpenGL编程指南在那一步之后留下了一些漏洞.他们解释了如何加倍缓冲和同步刷新率以及所有这些的详细信息,但它们没有提供有关如何更新视图的任何实际示例.所以目前我可以在屏幕上绘制很多很酷的东西,但是一旦它在那里它只是一个静态图像.没有动,没有旋转.
有谁知道这是如何实际完成的一个很好的简单例子?
您可以尝试使用显示链接重复绘制与显示同步.设置一个:
GLint swapInt = 1;
[yourContext setValues:&swapInt forParameter:NSOpenGLCPSwapInterval];
CVDisplayLinkCreateWithActiveCGDisplays(&displayLink);
CVDisplayLinkSetOutputCallback(displayLink, &displayLinkCallback, self);
CGLContextObj cglContext = [yourContext CGLContextObj];
CGLPixelFormatObj cglPixelFormat = [[NSOpenGLView defaultPixelFormat] CGLPixelFormatObj];
CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext(displayLink, cglContext, cglPixelFormat);
CVDisplayLinkStart(displayLink);
Run Code Online (Sandbox Code Playgroud)
然后,您的回调每帧运行一次:
static CVReturn displayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp* now, const CVTimeStamp* outputTime, CVOptionFlags flagsIn, CVOptionFlags* flagsOut, void* displayLinkContext)
{
NSAutoreleasePool* pool = [NSAutoreleasePool new];
if ([self lockFocusIfCanDraw])
{
//Your drawing code
[self unlockFocus];
}
[pool drain];
return kCVReturnSuccess;
}
Run Code Online (Sandbox Code Playgroud)