Daniel Bartlett - 2010-02-22

glReadPixels causing an Exception in this case is probably due to one of these:
a) FImage being nil, so FImage.Data throws exception
b) FImage.Data being nil, with no PBO bound
c) A pixel buffer being bound to the GL_PIXEL_PACK_BUFFER bind point, in which case it tries moving the read pixels into the bound pixel buffer at offset "Addr(FImage.Data)" which if FImage.Data<>nil (which is offset=0) will likely be a large offset outside the PBO. If this is the case, try putting:
glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0); in front of it (or find out why a PBO is still bound)