Я не эксперт по вопросам iPhone, в частности, и я являюсь средним программистом OpenGL, так что примите это во что бы то ни стало -
OpenGL препятствует прямому манипулированию пикселями, в основном потому, что это не имеет особого смысла, когда вы имеете дело с любым видом аппаратного ускорения. Буферы кадров обычно больше сохраняются непосредственно в графическом ОЗУ, и хотя передача битов в графическую память происходит быстро, извлечение информации обратно является редким и неоптимизированным случаем. Трехмерные карты оптимизированы для быстрого текстурирования треугольников, а не пикселей.
В старые добрые времена, когда кадровый буфер находился в основной памяти, это не имело большого значения, но все изменилось. Поэтому, несмотря на то, что зачастую все еще можно просматривать отдельные пиксели, вы, как правило, получаете резкое увеличение скорости, повторно выражая свою работу как собственный метод OpenGL. Кстати, вы можете писать пиксели, используя GL_POINTS, но, опять же, это довольно медленно.
Тем не менее, есть некоторые эффекты, для которых полезно манипулирование пикселями на месте - эффекты плазмы и пламени на самом деле не могут быть выполнены никаким другим способом. Для этого я предлагаю вам эмулировать буфер кадров - выделите свой и напишите в него напрямую. Затем, когда вам нужно отобразить его, сразу переместите весь блок на экран.