GLKViewDrawableMultisample4X не работает

Мое приложение iOS прекращает рендеринг, если GLKView drawableMultisample имеет значение GLKViewDrawableMultisample4X. Все отлично работает с GLKViewDrawableMultisampleNone, но если я установлю его на GLKViewDrawableMultisample4X, то я получу только пустой розовый экран.

Я проверил это на iOS Simulator / iOS 7.0.3

Кто-нибудь знает, как решить эту проблему? Это может быть связано с симулятором iOS и может хорошо работать на реальном устройстве?

1 ответ

У меня была именно эта проблема. Не ясно, является ли причина той же самой, но в моем случае я запускал рендеринг из триггера displayLink - без учета семантики setNeedsDisplay или как GLKit устанавливает буфер рендеринга вокруг выполнения метода drawInRect.

Я придерживался мнения, что, поскольку я использовал displayLink, я мог запускать весь свой рендеринг непосредственно из этого триггера - и, поскольку все это работало до того, как я попытался настроить сглаживание, я подумал, что это не может быть неправильно!

Проблема проявлялась только когда я установил GLKViewDrawableMultisample4X, очень похоже на проблему OP.

Решение...

  1. Убедитесь, что представление создано с помощью enableSetNeedsDisplay = NO
  2. Пусть displayLink вызывает функцию, которая не содержит ничего, кроме следующего:
- (void) render: (CADisplayLink *) displayLink {

    // Эта функция не должна * не * выполнять рендеринг
    // Мы только хотим сообщить GLKit, что мы готовы сделать

    GLKView * view = [self.window.subviews objectAtIndex:0];

    // Сообщаем GLKit, что мы готовы рисовать
    [просмотр дисплея];

    // GLKit обеспечит установку буферов перед 
    // вызываем drawInRect
}
  1. Переместить весь рендеринг в drawInRect. GLKit обеспечит установку буферов перед вызовом drawInRect.
Другие вопросы по тегам