gpt4 book ai didi

multithreading - NSOpenGLLayer 和多线程

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

我使用 Cocoa 编写了一个 3D 查看器。 OpenGL 渲染在创建自己的 NSOpenGLContext 的单独线程中执行。

如果没有图层处理,刷新时会调用 3D View 的 drawRect 方法,OpenGL 线程会进行刷新,一切都完美运行...

现在,我必须使用 Cocoa 层来实现应用程序。创建 3D NSView 时,将创建 NSOpenGLLayer 的子类并将其附加到 View 。方法

(void)drawInOpenGLContext:NSOpenGLContext *)ctx
pixelFormat:(NSOpenGLPixelFormat *)pixelFormat
forLayerTime:(CFTimeInterval)timeInterval
displayTime:(const CVTimeStamp *)timeStamp;

由 Cocoa 调用,但我无法让我的 OpenGL 线程渲染任何内容。

我曾尝试在OpenGL线程中使用传递给drawInOpenGLContext的OpenGL上下文,我尝试做一个

[layer setOpenGLContext:ctx]

在 OpenGL 线程中,并在线程中创建 OpenGL 上下文,依此类推,但没有任何效果。

最佳答案

你记得在你的 NSView 上调用 setWantsLayer 吗?您需要从 NSView 中调用它,以使其成为层托管 View 。请参阅 NSView setWantsLayer 的文档。

_testOglView = [[NSView alloc]initWithFrame:[self.view bounds]];
[_testOglView setLayer:[[TestOpenGLLayer alloc] init]];
[_testOglView setWantsLayer:YES];
[self.view addSubview:_testOglView];

在我的 TestOpenGLLayer 类中,我只需定义 drawInOpenGLContext 函数。我向其中添加了 opeNGL 命令, View 正确渲染了该图层。我不必调用 [layer setContext]。

关于multithreading - NSOpenGLLayer 和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7402447/

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