GLKViewDrawableMultisample4X не работает
Мое приложение iOS прекращает рендеринг, если GLKView drawableMultisample имеет значение GLKViewDrawableMultisample4X. Все отлично работает с GLKViewDrawableMultisampleNone, но если я установлю его на GLKViewDrawableMultisample4X, то я получу только пустой розовый экран.
Я проверил это на iOS Simulator / iOS 7.0.3
Кто-нибудь знает, как решить эту проблему? Это может быть связано с симулятором iOS и может хорошо работать на реальном устройстве?
1 ответ
У меня была именно эта проблема. Не ясно, является ли причина той же самой, но в моем случае я запускал рендеринг из триггера displayLink - без учета семантики setNeedsDisplay или как GLKit устанавливает буфер рендеринга вокруг выполнения метода drawInRect.
Я придерживался мнения, что, поскольку я использовал displayLink, я мог запускать весь свой рендеринг непосредственно из этого триггера - и, поскольку все это работало до того, как я попытался настроить сглаживание, я подумал, что это не может быть неправильно!
Проблема проявлялась только когда я установил GLKViewDrawableMultisample4X, очень похоже на проблему OP.
Решение...
- Убедитесь, что представление создано с помощью enableSetNeedsDisplay = NO
- Пусть displayLink вызывает функцию, которая не содержит ничего, кроме следующего:
- (void) render: (CADisplayLink *) displayLink { // Эта функция не должна * не * выполнять рендеринг // Мы только хотим сообщить GLKit, что мы готовы сделать GLKView * view = [self.window.subviews objectAtIndex:0]; // Сообщаем GLKit, что мы готовы рисовать [просмотр дисплея]; // GLKit обеспечит установку буферов перед // вызываем drawInRect }
- Переместить весь рендеринг в drawInRect. GLKit обеспечит установку буферов перед вызовом drawInRect.