У меня есть окно с основным видом типа NSView
и подвид, который является подклассом NSOpenGLView
, имя которого ] CustomOpenGLView
.
Подкласс NSOpenGLView
получается через Custom View
в Interface Builder и путем установки его класса на CustomOpenGLView
.
Это сделано в соответствии с образцом кода Apple OpenGLView с поддержкой слоев .
Приложение предназначено для отрисовки чего-либо в OpenGLContext каждые, скажем, 0,05 секунды. С отключенным Core Animation Layer я могу видеть движущийся объект в представлении, что является следствием непрерывной перерисовки вида. И все работает безупречно.
Теперь я хочу иметь полупрозрачный вид поверх CustomOpenGLView
для размещения кнопок управления, таких как play / stop / ecc ..
Для этого я добавил подпредставление в CustomOpenGLView
, и я включил основной слой анимации на CustomOpenGLView
. Кнопки управления размещены в этом новом подвиде.
Таким образом, представление с кнопками управления правильно отображается поверх CustomOpenGLView
, но теперь представление не перерисовывается. Он отрисовывается только в том случае, если я изменяю размер окна, содержащего все эти представления.
В результате я не вижу никакой "анимации" ... Я вижу только неподвижное изображение, которое представляет первый кадр, который рисуется при запуске цикла рисования. Если я изменяю размер окна, openGLContext перерисовывается, пока я не перестану изменять размер окна. После этого я снова вижу неподвижное изображение с последним рисунком, произошедшим во время изменения размера.
Кроме того, когда начинается цикл рисования, на экране появляется только первый «кадр», и если я изменяю размер окна, скажем, через 5 секунд, я вижу в представлении именно то, что должно было быть нарисовано через 5 секунд после начало цикла рисования.
Похоже, мне нужно установить [glView setNeedsDisplay: TRUE]
. Я так и сделал, но ничего не изменилось.
В чем ошибка? Почему добавление основного слоя анимации прерывает перерисовку? Означает ли это что-то, чего я не понимаю?