當調整GLKView
的大小時,會在緩衝區和GLKView
的上下文中執行一些幕後操作。在執行這些幕後操作所需的時間內,繪製到GLKView
不會產生正確的結果。調整GLKView的大小
在我的情況,我有一個GLKView
已啓用setNeedsDisplay
,所以,任何時候我需要更新它在屏幕上的內容,我只是叫上 GLKView
-setNeedsDisplay
。我使用GLKView
來繪製圖像,所以如果我需要繪製不同大小的圖像,我還需要更改GLKView
的大小。
問題:當我在該視圖上更改GLKView
的尺寸並調用setNeedsDisplay
時,屏幕上的結果不正確。這是因爲GLKView
尚未完成新的大小更改所調用的幕後操作,然後它會嘗試繪製新圖像。
我在GLKView
上找到了解決此問題的方法:performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0
而不是setNeedsDisplay
。這主要是強制主線程在調用setNeedsDisplay
之前等待所有幕後的openGL操作完成。雖然這工作正常,但我想知道是否有更好的解決方案。例如,是否有openGL調用讓線程在繼續之前等待所有openGL操作完成?
我可以抱你 – dxb
你是如何重置它的?重新創建它?還是有一個特定的方法來調用。 – flainez
在我的情況下,調整大小後,我設置了我的'CIContext'對象,如下所示:'ci_context = [CIContext contextWithEAGLContext:glkView.context]',然後調用'[glkView display]'。請注意,這是很久以前的事了,我沒有深入瞭解這一點,所以不要以爲這是正確的方法。 – spybart