Ios 检测到OpenGL线程冲突

Ios 检测到OpenGL线程冲突,ios,multithreading,ios7,opengl-es,opengl-es-2.0,Ios,Multithreading,Ios7,Opengl Es,Opengl Es 2.0,在iOS 7.1中引入了EAGLContext上的多线程,我在检测到OpenGL线程冲突时遇到了很多错误 我已经在上下文中设置了multi-thread=YES,但仍然得到了错误。这很奇怪,因为我输出了很多相同的错误: OpenGL Thread Conflict Detected 0x17022cd40 我认为十六进制是线程ID-它似乎是一致的。 知道我为什么要输出这个错误吗?OpenGL不支持或至少在非常有限的场景中支持它,而在渲染部分不支持多线程 它根本不支持它 我不知道您的具体用法或i

在iOS 7.1中引入了EAGLContext上的多线程,我在检测到OpenGL线程冲突时遇到了很多错误

我已经在上下文中设置了multi-thread=YES,但仍然得到了错误。这很奇怪,因为我输出了很多相同的错误:

OpenGL Thread Conflict Detected
0x17022cd40
我认为十六进制是线程ID-它似乎是一致的。
知道我为什么要输出这个错误吗?

OpenGL不支持或至少在非常有限的场景中支持它,而在渲染部分不支持多线程

它根本不支持它

我不知道您的具体用法或iphone实现,但库本身不支持它

试试看这里

根据我的经验,如果你想使用多线程,就需要一个线程来处理OpenGL库/渲染,还有一个线程专门处理不同范围的路径查找、AI、冲突检测,你可以说

我希望这有帮助

干杯
Maurizio

您没有试图从多个线程访问EAGLContext,是吗?我不认为这会使EagleContext线程安全,它只是将一些CPU端指令卸载到帮助线程上,以尝试加快速度。@BradLarson是对的:多线程属性所做的只是卸载与OpenGL ES调用相关的CPU工作,例如在将顶点缓冲区上载到GPU之前格式化它们。要从多个线程使用GL,您应该为每个线程使用单独的上下文,如果希望共享资源,则应使用共享组。如果你这么做了,在后台线程的上下文中设置multi-threaded=YES是没有意义的,而在主线程上设置multi-threaded=YES可能没有什么意义,因为你已经将所有CPU繁重的工作卸载到了后台线程中,对吧?我不相信我在多个线程上使用了EagleContext。我的意思是,每次它抛出一个警告,每次运行它都会打印一个不同的地址,但是在多个警告中,它在我程序的完全不同的区域都是相同的地址@rickster我已经将CPU繁重的工作卸载到一个单独的线程上,EagleContext也有自己的线程。让它们正常工作很痛苦,但它们确实如此。结果不会导致应用程序崩溃,也不会一直抛出警告,尽管我注意到当在XCodeSee中禁用OGL断点时,它不会抛出警告,因为OpenGL ES在iOS中的多线程工作方式。