Изменение размера GLKView

Когда размер GLKView изменяется, есть некоторые закулисные операции, которые происходят с буферами и контекстом этого GLKView . В течение времени, необходимого для выполнения этих закулисных операций, рисование в GLKView не дает правильных результатов.

В моем сценарии у меня есть GLKView с включенным setNeedsDisplay , поэтому в любое время, когда мне нужно обновить его содержимое на экране, я просто вызываю -setNeedsDisplay на этом GLKView .Я использую GLKView для рисования изображений, поэтому, если мне нужно нарисовать изображение с другим размером, мне также нужно изменить размер GLKView .

Проблема: когда я изменяю размер GLKView и вызываю setNeedsDisplay в этом представлении, результат на экране неверный. Это связано с тем, что GLKView не завершает закулисные операции, вызванные изменением нового размера, прежде чем он попытается нарисовать новое изображение.

Я нашел способ обойти это, вызвав: performSelector: @selector (setNeedsDisplay) withObject: nil afterDelay: 0 вместо просто setNeedsDisplay в GLKView . Это в основном заставляет основной поток ждать завершения всех скрытых операций openGL перед вызовом setNeedsDisplay . Хотя это работает нормально, мне интересно, есть ли лучшее решение. Например, существует ли вызов openGL, чтобы заставить поток ждать завершения всех операций openGL, прежде чем продолжить?

6
задан spybart 20 October 2011 в 00:20
поделиться