Когда размер 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, прежде чем продолжить?