gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:24:20 29 4
gpt4 key购买 nike

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com