在iOS 7.1(其中multiThreaded
在EAGLContext
被引入)时,我收到了很多错误“OpenGL Thread Conflict Detected
”。OpenGL线程冲突检测
我已经在上下文中设置了multiThreaded = YES
,但仍然收到错误消息。很奇怪,因为我得到的输出很多相同的错误:
OpenGL Thread Conflict Detected
0x17022cd40
我认为是十六进制线程ID - 这似乎是一致的。 为什么我得到这个错误输出的任何想法?
你是不是想从多个线程访问EAGLContext,是吗?我不认为这会使EAGLContext线程安全,它只是将一些CPU端指令卸载到帮助程序线程上,以加快速度。 –
@BradLarson是对的:所有'multiThreaded'属性都会卸载与OpenGL ES调用相关的CPU工作(例如,在将顶点缓冲区上传到GPU之前先格式化顶点缓冲区)。要从多个线程处理GL,您应该为每个线程使用一个单独的上下文(如果您希望它们共享资源,则使用共享组)。如果你这样做,那么对于在后台线程上的上下文设置'multiThreaded = YES'是没有意义的(对于主线程上的那个上下文,可能很少,因为你已经将所有CPU繁重的工作卸载到后台线程,对不对?)。 – rickster
我不相信我在多个线程上使用'EAGLContext'。我的意思是,每当它发出警告时,它会在每次运行中打印一个不同的地址,但在多个警告中,它是相同的地址(在我的程序的完全不同的区域中)。 @rickster我已经将CPU繁重的工作交给了一个单独的线程,而且'EAGLContext'也有它自己的线程(让他们正常工作是件痛苦的事情,但他们确实如此)。 结果不会导致应用程序崩溃,并且不会一直抛出警告(尽管我注意到它在XCode中禁用OGL断点时不会发出警告) –