我正在编写一个 Cocoa OpenGL 应用程序并CVDisplayLink
按照此技术说明运行我的主循环。它适用于运行循环。
问题是有时当我退出时,在我的应用程序已经退出后,我的显示链接回调将在它自己的线程上被调用。这会导致我的渲染代码在我调用任何 OpenGL 函数(glClear
在本例中)时立即被调用并崩溃,因为我的上下文不再存在。
我有CVDisplayLinkRelease(displayLink);
我的 NSView 的dealloc
功能,但它似乎从未被调用,我假设是因为 ARC。有什么办法可以确保我的显示链接在我的视图之前被破坏?
编辑:我没有注意到崩溃实际上是由我拥有的断言触发的。我在每次调用 OpenGL 后都会断言,glGetError
以确保我可以及早发现错误。致电glClear
or后,[[view openGLContext] flushBuffer];
我收到错误 1286,即GL_INVALID_FRAMEBUFFER_OPERATION
.
这是合乎逻辑的,因为我的窗口和视图正在被释放,但这无助于解决问题。我不想忽略这些错误,因为它们显然可能在更多情况下发生,而不仅仅是这个。我仍然需要找到“正确”的方式来确保我的显示链接在我的视图之前被关闭。