我正在使用一个简单的DLL插件,我调用glReadPixels
来返回屏幕上的像素。当调用DLL中的函数时,它无法使用错误1282 (GL_INVALID_OPERATION)
。
我决定将代码作为控制台EXE
程序运行,但错误仍然存在。
我做错了什么?我使用 Windows 10 与 Retina 屏幕,我的代码如下:
int x2 = GetSystemMetrics(SM_CXSCREEN);
int y2 = GetSystemMetrics(SM_CYSCREEN);
GLvoid *imagePixelsArray = malloc((x2 *x2)*(y2* y2)*4);
glReadPixels(0, 0,x2,y2, GL_RGBA, GL_UNSIGNED_BYTE, imagePixelsArray);
cout << "ERROR is " << glGetError() << endl;
我做了x2 *x2
和(y2* y2)
,因为我正在使用Retina屏幕。删除它也没有解决问题。
答案 0 :(得分:3)
我正在使用一个简单的DLL插件,我调用glReadPixels来返回屏幕上的像素。
你想截取屏幕截图吗?您的代码段看起来就像您尝试的那样。这是关于OpenGL&#39; glReadPixels
:
您无法使用 glReadPixels 获取屏幕截图!
直到包括Windows-XP在内的一些OpenGL实现都有这样的行为:如果你创建了一个没有背景画笔集的全屏窗口创建了一个OpenGL上下文并使其成为最新的,你可能实际上最终得到了一个截图图形驱动程序没有初始化窗口的帧缓冲,因此将屏幕内容保留为&#34;垃圾&#34;你可以抓住。
然而,这基本上是未定义的行为, glReadPixels被定义为仅提供使用OpenGL创建的像素。
从Windows Vista开始,Windows窗口被合成,不再共享一个常见的屏幕帧缓冲区,这种创建屏幕截图的方式不再有效。对于MacOS-X和X11来说,即使在合成之前,它从来没有这样做过,它往往不起作用。