Ответ 1
Один из способов, который приходит на ум - это нарисовать пиксели вашего фрейма в текстуре, а затем визуализировать эту текстуру с помощью OpenGL.
Я написал сообщение в блоге некоторое время назад о том, как это сделать, в первую очередь для старых игр на основе пиксельных видеоигр, но это также относится к вашей ситуации. Сообщение Android Native Coding в C, и я создал репозиторий github с примером. Используя эту технику, я смог получить 60 FPS даже на аппаратном обеспечении первого поколения.
EDIT относительно glTexImage2D против glTexSubImage2D для этого подхода.
Вызов glTexImage2D будет выделять видеопамять для вашей текстуры и копировать пиксели, которые вы передаете в эту память (если вы не передаете NULL). Вызов glTexSubImage2D обновит пиксели, указанные вами в уже выделенной текстуре.
Если вы обновляете всю текстуру, тогда существует небольшая разница, вызывающая тот или иной, на самом деле glTexImage2D обычно быстрее. Но если вы только обновляете часть текстуры, glTexSubImage2D выигрывает на скорости.
Вы должны использовать размеры текстур из 2-х цветов, поэтому при покрытии экрана на устройствах с высоким разрешением требуется текстура 1024x512 и текстура 512x512 на средних разрешениях. Текстура больше площади экрана (hi-res 800x400-ish), что означает, что вам нужно только обновить ее часть, поэтому glTexSubImage2D - это путь.