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