ios的opengl究竟能不能在非主线程渲染
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios的opengl究竟能不能在非主线程渲染相关的知识,希望对你有一定的参考价值。
参考技术A 可以,但很少这样做,使用eglMakeCurrent,使当前线程绑定gl上下文,几乎不会用多个线程去渲染,因为opengl是基于状态机的,另外,opengl在多个线程之间切换的开销也很大(即eglMakeCurrent的开销是不可忽视的)IKImageBrowserView "--ImageKit 错误:在非主线程中调用了 reloadData"
【中文标题】IKImageBrowserView "--ImageKit 错误:在非主线程中调用了 reloadData"【英文标题】:IKImageBrowserView "--ImageKit Error: reloadData called in non main thread" 【发布时间】:2011-01-09 20:10:25 【问题描述】:我正在编写一个使用 IKImageBrowserView 的 Cocoa Mac 应用程序。 当我调用以下内容时:
[imageBrowserView reloadData];
调试器控制台打印:
--ImageKit Error: reloadData called in non main thread
我尝试将 reloadData 方法放在另一个方法中,然后调用以下内容:
[self performSelectorOnMainThread:@selector(reloadMyView) withObject:nil waitUntilDone:NO];
但我仍然得到相同的 ImageKit 错误。有什么想法吗?
【问题讨论】:
【参考方案1】:** 已修复 **
原因是结合使用 Bindings 从 NSArrayController 填充我的 IKImageBrowserView,以及在填充更新后调用保存在它自己的 NSManagedObjectContext 上的 NSOperation。
我有一个通知观察器,用于保存 NSOperation 中的上下文,因此我可以 mergeChangesFromContextDidSaveNotification 到我的主线程上下文,但我需要在 MainThread 上执行此操作。 NSArrayController 将 automaticallyPreparesContent 设置为 YES,“也注册为其托管对象上下文的观察者”。因此,由于从通知执行合并,这是在与 NSOperation 相同的单独线程上完成的,因此 NSArrayController 再次在单独的线程上准备它的内容,然后再次在单独的线程上更新 IKImageBrowserView导致错误/警告。
【讨论】:
以上是关于ios的opengl究竟能不能在非主线程渲染的主要内容,如果未能解决你的问题,请参考以下文章