glReadPixels函数返回错误1282(GL_INVALID_OPERATION)
glReadPixels function returning error 1282 (GL_INVALID_OPERATION)
我正在使用一个简单的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屏幕。删除它也没有解决问题。
我正在使用一个简单的DLL插件,调用glReadPixels来返回屏幕上的像素。
你想截屏吗?您的代码片段看起来像是在尝试。以下是OpenGL的glReadPixels
:
您不能使用glReadPixels进行屏幕截图
直到现在,包括Windows XP在内,一些OpenGL实现的行为是,如果你创建了一个没有背景笔刷集的全屏窗口,创建了OpenGL上下文并使其成为最新的,你实际上可能会因为图形驱动程序没有初始化窗口的帧缓冲区而得到屏幕截图,从而使屏幕内容成为你可以抓取的"垃圾"。
然而,这本质上是未定义的行为,glReadPixels被定义为仅提供使用OpenGL创建的像素
从Windows Vista开始,窗口被合成,不再共享共同的屏幕帧缓冲区,这种不稳定的屏幕截图创建方式也不再有效。它从未在MacOS-X和X11中以这种方式工作过,甚至在合成成为一件经常不起作用的事情之前。
相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- C++ "error: invalid use of void expression"
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- 收到错误"invalid use of non-static data member 'stu::n' "
- Poloniex API "Invalid command" c++ libcurl
- C++模板错误:"invalid explicitly-specified argument for template parameter"
- SDL_CreateTextureFromSurface() "Invalid texture"错误?
- C++ "Invalid use of 'this' in non-member function" ,
- 为什么gmp会在这里与"invalid next size"重新定位一起崩溃?
- 继承类时"invalid use of incomplete type ‘class tree_node_t’"
- 为什么我会"Invalid read of size 8"?(瓦尔格林德)
- "fast"或"normal"在"free(): invalid next size (fast)"中是什么意思?
- 如何在Arduino程序中解决"invalid operands of types"?
- 在 atomic() 中 ++、add operation 和 fetch_add() 有什么区别
- 如何'Invalid conversion'和'no match for operator'更正这些 c++ 错误
- 访问函数变体时"Invalid conversion"错误
- "Floating-point invalid operation"将浮点数输入到字符串流时
- 防止"Float-point invalid operation"异常?
- glBindFramebuffer 在使用 GL_DRAW_FRAMEBUFFER 目标时会导致 "invalid operation" GL 错误