Проблемы с отображением полноэкранного CAEAGLLayer на Retina iPad
Я столкнулся с некоторыми проблемами при правильном отображении UIView с большим CAEAGLLayer. Если размер рамки превышает определенный размер (по-видимому, 768 в любом измерении с contentScaleFactor 2.0), он перерисовывается с искаженным изображением предыдущих версий буфера.
Это довольно легко воспроизвести в примере Apple GLPaint. PaintingView.m имеет жестко запрограммированный contentScaleFactor 1.0, но если вы измените его на 2.0:
self.contentScaleFactor = 2.0;
и запустить его на Retina iPad (не на симуляторе), вы получите что-то вроде этого при рисовании:
1 ответ
Это похоже на ошибку с настройкой kEAGLDrawablePropertyRetainedBacking
на ДА на сетчатке iPad, как сообщил Орион в этом вопросе. Установка этого на НЕТ, используя
eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking, kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];
удаляет сбитый рисунок, но GLPaint полагается на сохраненную основу для своих кистей, поэтому он не будет работать правильно, если вы это сделаете.
Я подал отчет об ошибке (rdar://11070429) с измененным GLPaint в качестве тестового приложения для этого поведения.