0

我的 AudioUnit 插件崩溃(在 Logic 9 和 Logic X - Mac OS X 10.8.4 下运行。在 AU Lab 中无法重现)

我的 AudioUnit 插件在单独的线程中执行绘图。当插件 GUI 关闭时,AU 插件会收到对以下内容的调用: NSView removeFromSuperviewWithoutNeedingDisplay 问题是,从 OS X 10.8.4 开始,在使用此函数调用 AU 时,我执行绘图的单独线程是仍在运行。但是,此时有些东西已经被破坏了,所以我在尝试绘制时收到了一个 openGL 错误:帧缓冲区操作无效(1286)。这当然会导致下一个插件 GUI 绘制中的图形损坏,并在几次 GUI 打开和关闭尝试后导致崩溃。

问题是: 1. 有没有在NSView removeFromSuperviewWithoutNeedingDisplay 之前调用的函数可以实现?这样,我可以在 Logic 破坏视图之前停止单独线程中的绘图。2、如果没有办法,您还有什么建议吗?也许在每次尝试绘制时检查一些东西?

谢谢!C。

4

1 回答 1

0

removeFromSuperviewWithoutNeedingDisplay 方法可能不是关闭 subView UI 的最佳点。

有两种选择:

  1. 订阅并响应插件主机窗口 NSWindowWillClose 通知。

  2. NSView 方法时的反应 - (void) viewWillMoveToWindow:(NSWindow)w

用 w==nil 调用(这基本上意味着视图将很快从窗口中删除)。

在这两种情况下,都可以在窗口关闭或视图层次结构更改之前立即做出反应,因此 SubView 仍然有一个“正常”的 UI 环境。

于 2013-08-01T07:19:26.467 回答