glReadPixels函数返回错误1282(GL_INVALID_OPERATION)

glReadPixels function returning error 1282 (GL_INVALID_OPERATION)

本文关键字:INVALID OPERATION GL 函数 返回 错误 1282 glReadPixels      更新时间:2023-10-16

我正在使用一个简单的DLL插件,在这里我调用glReadPixels来返回屏幕上的像素。调用DLL中的函数时,它无法工作,出现错误1282 (GL_INVALID_OPERATION)

我决定将代码作为控制台EXE程序运行,但错误仍然存在。

我做错了什么?我正在使用Windows 10Retina屏幕,我的代码如下:

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屏幕。删除它也没有解决问题。

我正在使用一个简单的DLL插件,调用glReadPixels来返回屏幕上的像素。

你想截屏吗?您的代码片段看起来像是在尝试。以下是OpenGL的glReadPixels:

您不能使用glReadPixels进行屏幕截图

直到现在,包括Windows XP在内,一些OpenGL实现的行为是,如果你创建了一个没有背景笔刷集的全屏窗口,创建了OpenGL上下文并使其成为最新的,你实际上可能会因为图形驱动程序没有初始化窗口的帧缓冲区而得到屏幕截图,从而使屏幕内容成为你可以抓取的"垃圾"。

然而,这本质上是未定义的行为glReadPixels被定义为仅提供使用OpenGL创建的像素

从Windows Vista开始,窗口被合成,不再共享共同的屏幕帧缓冲区,这种不稳定的屏幕截图创建方式也不再有效。它从未在MacOS-X和X11中以这种方式工作过,甚至在合成成为一件经常不起作用的事情之前。