Изменение размера GLKView - PullRequest
       42

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

6 голосов
/ 20 октября 2011

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

1 Ответ

9 голосов
/ 08 апреля 2012

Решение состояло в том, чтобы сбросить объект CIContext после изменения размера GLKView.
Спасибо всем за все!

...