2011-10-20 118 views
6

當調整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操作完成?

回答

9

解決方案是在GLKView已調整大小後重置CIContext對象。
謝謝你,每個人!

+2

我可以抱你 – dxb

+0

你是如何重置它的?重新創建它?還是有一個特定的方法來調用。 – flainez

+1

在我的情況下,調整大小後,我設置了我的'CIContext'對象,如下所示:'ci_context = [CIContext contextWithEAGLContext:glkView.context]',然後調用'[glkView display]'。請注意,這是很久以前的事了,我沒有深入瞭解這一點,所以不要以爲這是正確的方法。 – spybart

相關問題