【发布时间】:2016-05-10 21:12:18
【问题描述】:
我正在使用一个简单的 DLL 插件,我在其中调用 glReadPixels 以返回屏幕上的像素。在 DLL 中调用该函数时,它无法正常工作并出现错误 1282 (GL_INVALID_OPERATION)。
我决定将代码作为控制台EXE 程序运行,但错误仍然存在。
我做错了什么?我正在使用带有 Retina 屏幕的 Windows 10,我的代码如下:
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 屏幕。删除也没有解决问题。
【问题讨论】:
-
我有一个 cookie 表明您没有在有效的 GL 上下文中调用它。即使你是,十个 cookie 表示它不是对应于整个屏幕的上下文。
-
@JayKominek 来自 Unity 我从 OnPostRender 函数调用它,据我了解,它对其他人有用。由于它不起作用,我决定使用控制台应用程序自行测试它。你能提供一个链接或一个例子吗?如何从有效的 GL 上下文中调用它?对于否决票,我不知道为什么。
-
在
glReadPixels()之前的wglGetCurrentContext()是否返回NULL以外的其他内容? -
@genpfault 我做了
cout << wglGetCurrentContext()并得到了 00000000。这对我来说看起来像 null。你怎么看? -
@Programmer unity 在幕后做着各种各样的事情。如果它已初始化 GL,然后在 GL 上下文有效时运行您的代码,那么您就可以开始工作了。由于 OpenGL 的性质,不能期望完全脱离上下文的 GL 代码(在该词的非技术意义上)表现相同。在没有任何设置的情况下将其粘贴在控制台应用程序中是行不通的。 (这可能是反对票的来源。不是我。我什至没有投票结束。)