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