调用glReadPixels函数 得到的全为黑色

我实在winform窗口中 调用了一个mfc做的dll中的函数进行opengl绘制。然后想得到窗口中每个像素的颜色来进行截屏生成图片,但是用glReadPixels函数读到的都是黑色。
初始化是用winform的handle带进去进行初始化,然后绘制一个全部绿色的窗口。绿色窗口成功显示,但是但是用glReadPixels函数读不出来。
初始化过程:图片说明图片说明
然后绘制的函数:图片说明
读取像素的函数:图片说明
图像绘制是成功的:图片说明
但是读取到的值都是黑色,只有alpha是ff:图片说明
why???

你的GetScreenSnot在哪里调用的?
glReadPixels实际上是从缓冲区中读取数据,如果使用了双缓冲区,则默认是从正在显示的缓冲(即前缓冲)中读取,而绘制工作是默认绘制到后缓冲区的。一句话,glReadPixels需要在swapbuffers以后调用才行,另外,也不推荐用这个函数,效率超级差