几周以来,我一直在尝试使用 Objective-C 中的 OpenGL 制作场景,但似乎无法让它发挥作用。我从 Drawing to an NSOpenGLView Class: A Tutorial 开始,这对我来说效果很好,我什至能够稍微扩展它,但是 OpenGL 编程指南在这一步之后留下了一些漏洞。他们解释了如何双缓冲和同步刷新率以及所有这些的详细信息,但他们没有提供任何如何更新 View 的实际示例。所以目前我可以在屏幕上绘制很多很酷的东西,但一旦它出现,它只是一个静态图像。不能移动,不能旋转。
有谁知道一个很好的、简单的例子来说明这是如何实际完成的?
最佳答案
您可以尝试使用显示链接来与显示同步重复绘制。设置一个:
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);
然后,您的回调每帧运行一次:
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;
}
关于objective-c - 使用 Cocoa 的简单 OpenGL 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9898649/