2014-04-08 100 views
0

在iOS 7.1(其中multiThreadedEAGLContext被引入)時,我收到了很多錯誤「OpenGL Thread Conflict Detected」。OpenGL線程衝突檢測

我已經在上下文中設置了multiThreaded = YES,但仍然收到錯誤消息。很奇怪,因爲我得到的輸出很多相同的錯誤:

OpenGL Thread Conflict Detected 
0x17022cd40 

我認爲是十六進制線程ID - 這似乎是一致的。 爲什麼我得到這個錯誤輸出的任何想法?

+2

你是不是想從多個線程訪問EAGLContext,是嗎?我不認爲這會使EAGLContext線程安全,它只是將一些CPU端指令卸載到幫助程序線程上,以加快速度。 –

+0

@BradLarson是對的:所有'multiThreaded'屬性都會卸載與OpenGL ES調用相關的CPU工作(例如,在將頂點緩衝區上傳到GPU之前先格式化頂點緩衝區)。要從多個線程處理GL,您應該爲每個線程使用一個單獨的上下文(如果您希望它們共享資源,則使用共享組)。如果你這樣做,那麼對於在後臺線程上的上下文設置'multiThreaded = YES'是沒有意義的(對於主線程上的那個上下文,可能很少,因爲你已經將所有CPU繁重的工作卸載到後臺線程,對不對?)。 – rickster

+0

我不相信我在多個線程上使用'EAGLContext'。我的意思是,每當它發出警告時,它會在每次運行中打印一個不同的地址,但在多個警告中,它是相同的地址(在我的程序的完全不同的區域中)。 @rickster我已經將CPU繁重的工作交給了一個單獨的線程,而且'EAGLContext'也有它自己的線程(讓他們正常工作是件痛苦的事情,但他們確實如此)。 結果不會導致應用程序崩潰,並且不會一直拋出警告(儘管我注意到它在XCode中禁用OGL斷點時不會發出警告) –

回答

-1

OpenGL不支持(或者至少在非常有限的情況下支持它,而不是在渲染部分)多線程。

它根本不支持它。

我不知道你的特定用法或iphone的實現,但庫本身不支持它。

試着在這裏看到。

http://www.equalizergraphics.com/documentation/parallelOpenGLFAQ.html

如果你想要去的多線程,在我的經驗,就是有一個單獨的線程處理OpenGL庫/渲染和專業在不同的範圍更多的線程(尋路,AI,碰撞檢測的一個,你的名字)。

我希望這有助於。

乾杯 莫里吉奧

+0

請參閱[Apple的編程指南](https://developer.apple.com/library/ios/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/ConcurrencyandOpenGLES/ConcurrencyandOpenGLES.html#//apple_ref/doc/uid/TP40008793-CH409-SW2)瞭解如何使用OpenGL ES進行多線程處理適用於iOS。 – rickster