После изменения ориентации вызова glClear(GL_COLOR_BUFFER_BIT)
недостаточно для очистки дисплея GL (рисунок где-то кэшируется?) Как я могу очистить этот кэш?
Вы рисуете слишком закадровое изображение. Это изображение становится доступным только для композиции CoreAnimation, когда вы вызываете -presentRenderbuffer
.
После изменения ориентации glReadPixel()
больше не может получить доступ к пикселям, нарисованным до изменения ориентации. Как я могу получить доступ к тому, где это хранится?
Полагаю, вы используете опцию RetainedBacking
. Без этой опции вы никогда не сможете прочитать содержимое предыдущего кадра, даже вне поворота. При вызове -presentRenderbuffer
содержимое закадрового изображения отправляется в CA для компоновки, и на его место приходит новое изображение. Содержимое нового изображения не определено.
Предполагая, что вы используете что-то, полученное из примера кода EAGLView, и что вы используете RetainedBacking
, когда происходит вращение, ваш кадровый буфер изменяется путем освобождения и перераспределения. Любое из существующего содержимого будет потеряно, когда это произойдет.
Вы можете либо:
1) Сохраните содержимое самостоятельно при переходе, вызвав ReadPixels
2) никогда не перераспределяйте кадровый буфер и вместо этого вращайте UIView (или CALayer), используя свойство transform. Это может привести к значительному снижению производительности во время компоновки, но вы получите вращение, которое вы ищете, без необходимости изменять размер вашего кадрового буфера.