I think the second parameter is wrong. Here is the prototype of the function:
void glReadPixels( GLint x,
GLint y,
GLsizei width,
GLsizei height,
GLenum format,
GLenum type,
GLvoid* data );
The first two parameters are the location to begin reading. The second parameter, y, should probably be 0 also but certainly not winHeight because that would be an invalid value. The y parameter can be winHeight-1 at most.