EAGLView изменения ориентации и странная буферизация - PullRequest
0 голосов
/ 09 июня 2009

Я пишу приложение, которое выгружает некоторые тяжелые рисунки в EAGLView, и оно делает некоторые легкие вещи в UIKit сверху. Кажется, что рендер GL во время изменения ориентации где-то кешируется, и я не могу понять, как получить к нему доступ. В частности:

  • После изменения ориентации вызова glClear (GL_COLOR_BUFFER_BIT) недостаточно для очистки дисплея GL (рисунок куда-то кэшируется?) Как я могу очистить этот кэш?
  • После изменения ориентации glReadPixel () больше не может получать доступ к пикселям, нарисованным до изменения ориентации. Как я могу получить доступ к тому, где это хранится?

Ответы [ 2 ]

0 голосов
/ 24 июля 2009

После изменения ориентации вызова glClear(GL_COLOR_BUFFER_BIT) недостаточно для очистки дисплея GL (рисунок где-то кэшируется?) Как я могу очистить этот кэш?

Вы рисуете слишком закадровое изображение. Это изображение становится доступным только для композиции CoreAnimation, когда вы вызываете -presentRenderbuffer.

После изменения ориентации glReadPixel() больше не может получить доступ к пикселям, нарисованным до изменения ориентации. Как я могу получить доступ к тому, где это хранится?

Полагаю, вы используете опцию RetainedBacking. Без этой опции вы никогда не сможете прочитать содержимое предыдущего кадра, даже вне поворота. При вызове -presentRenderbuffer содержимое закадрового изображения отправляется в CA для компоновки, и на его место приходит новое изображение. Содержимое нового изображения не определено.

Предполагая, что вы используете что-то, полученное из примера кода EAGLView, и что вы используете RetainedBacking, когда происходит вращение, ваш кадровый буфер изменяется путем освобождения и перераспределения. Любое из существующего содержимого будет потеряно, когда это произойдет.

Вы можете либо:
1) Сохраните содержимое самостоятельно при переходе, вызвав ReadPixels
2) никогда не перераспределяйте кадровый буфер и вместо этого вращайте UIView (или CALayer), используя свойство transform. Это может привести к значительному снижению производительности во время компоновки, но вы получите вращение, которое вы ищете, без необходимости изменять размер вашего кадрового буфера.

0 голосов
/ 14 июня 2009

Я не эксперт, но я читал Оптимизация OpenGL ES для iPhone OS и там говорилось:

Избегайте смешивания OpenGL ES с рендерингом на собственной платформе

Вы можете проверить это, чтобы увидеть, помогает ли это.

...