Мне нужно было отобразить некоторые виджеты Какао поверх NSOpenGLView в существующем приложении. Я последовал примеру в коде Apple LayerBackedOpenGLView
. Для NSOpenGLView
задан слой подложки с использованием:
[glView setWantsLayer:YES]
Затем Какао NSView
с виджетами добавляется как подпредставление glView
. Это в основном работает и работает вдвое быстрее, чем мой предыдущий подход, когда я добавил NSView
, содержащий виджеты, в дочернее окно окна, содержащего glView (это было другое решение, которое я нашел в Интернете).
Были две проблемы.
- Во-первых, некоторые текстуры, которые я использую с наложением, больше не дают правильного наложения. После небольшого поиска мне показалось, что мне может понадобиться очистить альфа-канал
OpenGLView
. Этот фрагмент кода, который я вызываю после рисования фрейма, похоже, решил эту проблему:
Код:
glColorMask(FALSE, FALSE, FALSE, TRUE); //This ensures that only alpha will be effected
glClearColor(0, 0, 0, 1); //alphaValue - Value to which you need to clear
glClear(GL_COLOR_BUFFER_BIT);
glColorMask(TRUE, TRUE, TRUE, TRUE); //Put color mask back to what it was.
Может кто-нибудь объяснить, зачем это нужно при использовании CALayer
, но не без?
- Вторая проблема, для которой у меня нет решения. Кажется, что когда я перемещаюсь к той части сцены, где наблюдалась проблема # 1, частота кадров падает с примерно 110 FPS до 10 FPS. Опять же, это начало происходить только после того, как я добавил слой подложки. Это не всегда происходит. Иногда FPS остается высоким при панорамировании этой части сцены, но это редко. Я предполагаю, что это должно быть что-то с тем, как текстуры смешиваются здесь, но я понятия не имею, что.
Есть мысли?