Используете ли вы kEAGLDrawablePropertyRetainedBacking
в вашем CAEAGLLayer
? Если вы не установите это значение на YES
, то содержимое вашего буфера не гарантированно будет сохранено после его рендеринга. Другими словами, они выполняют рендеринг с двойной буферизацией: есть 2 отдельных буфера. Один отображается, другой отображается. Когда вы отображаете один кадр и отображаете его, следующий кадр отображается в другом буфере, поэтому содержимое не сохраняется. (Это объясняет, почему вы видите мусор, если не очищаете этот фрагмент экрана.) Если вы используете этот флаг, графическая система, вероятно, копирует данные во время переворота, чтобы сохранить содержимое.
Использование этого флага приведет к тому, что вашему приложению потребуется больше памяти и больше времени для рендеринга, поэтому оно может не стоить того, что вы провели выше. Вам придется профилировать и посмотреть. (Подробнее об этом см. документы Apple .)
Вы также можете взглянуть на демонстрационную версию GLPaint - она использует это свойство, чтобы избежать перерисовки экрана каждый раз.