objective-c - 使用 Cocoa 的简单 OpenGL 示例

标签 objective-c cocoa opengl

几周以来,我一直在尝试使用 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/

相关文章:

ios - 将 NSInteger 乘以任何数字时的无效操作数

ios - Objective-c 清除缓存 NSCachedURLResponse

cocoa - 粘贴板上的多种类型,包括文件、rtfd 和自定义类型 (Mac OS X 10.6)

ios - 使用 Objective-C 创建 iOS 框架

objective-c - Objective-C 中什么时候我的 const 应该是静态的?

objective-c - 如何逐行从 NSFileHandle 读取数据?

swift - 将文件夹拖动到非基于文档的应用程序中的停靠图标

c++ - 如何使用 opengl 或 dx 从网格生成深度(高度)图像

java - 如何在OpenGL中将纹理加载到对象

c - 根据点旋转一个物体