MTKView委托停止响应-(void)drawInMTKView:(nonnull MTKView *)view调用

时间:2018-12-08 18:45:07

标签: macos cocoa metal

我在由窗口控制器管理的窗口中有一个MTKView。当我第一次实例化窗口控制器和窗口时,MTKView调用我的委托的两次调用,并且以首选速率调用drawInMTKView:

- (void)drawInMTKView:(nonnull MTKView *)view
- (void)mtkView:(nonnull MTKView *)view drawableSizeWillChange:(CGSize)size

如果关闭窗口(不释放窗口,则只是隐藏),当我重新打开窗口时,在调整MTKView大小时仍会调用drawableSizeWillChange调用,但不再调用drawInMTKView。 MTKView以其自身的显示链接在其默认模式下运行。由于未调用drawInMTKView,因此可以相信MTKView中的私有displayLink变量有问题。

我正在OSX Mojave(最近的2017年MacBook Pro)上运行Xcode 9.4.1

2 个答案:

答案 0 :(得分:1)

我创建了自己的CVDisplayLink回调,并且没有使用MTKView提供的回调来解决MTKView可能出现的问题。

答案 1 :(得分:0)

我遇到了同样的问题,我通过从其超级视图中删除MTKView来解决了这个问题。并在显示窗口时放回去。

- (BOOL)windowShouldClose:(NSWindow *)sender
{
    [_metalPreview removeFromSuperview];

    return YES;
}

那样,您无需创建自定义CVDisplayLink。