Я совершенно уверен, что ошибка нехватки памяти не возникает из glReadPixels (в действительности glReadPixels не выделяет саму память).
Ошибка, вероятно, вызвана другими процедурами, выделяющими объекты буфера или текстуры. Как только вы обнаружите ошибку нехватки памяти, вы должны освободить все необязательные объекты буфера (текстуры, текстурные карты, редко используемые объекты буфера), чтобы выделить новый буферный объект, содержащий возвращенные данные glReadPixels.