在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斷點時不會發出警告) –