Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ glGetIntegerv返回36064_C++_Qt_Opengl - Fatal编程技术网

C++ glGetIntegerv返回36064

C++ glGetIntegerv返回36064,c++,qt,opengl,C++,Qt,Opengl,我有一个带有QOpenGLWidget的Qt应用程序。在这个小部件中,我有我的OpenGL函数,它们按照我的预期渲染我的场景 在这些渲染说明中,我添加了以下几行,以获得意外的结果: void MyOpenGLVisualizer::paintGL() { GLint my_val = 0; glGetIntegerv(GL_DRAW_BUFFER, &my_val); std::cout << my_val << std::endl;

我有一个带有
QOpenGLWidget
的Qt应用程序。在这个小部件中,我有我的OpenGL函数,它们按照我的预期渲染我的场景

在这些渲染说明中,我添加了以下几行,以获得意外的结果:

void MyOpenGLVisualizer::paintGL()
{
    GLint my_val = 0;
    glGetIntegerv(GL_DRAW_BUFFER, &my_val);
    std::cout << my_val << std::endl;
    ...
}
void MyOpenGLVisualizer::paintGL()
{
闪烁my_val=0;
glGetIntegerv(GL\u DRAW\u BUFFER和my\u val);

std::cout这是阅读OpenGL2.0手册页面的不幸结果,它们没有反映现代API

0x8CE0
GL\u COLOR\u ATTACHMENT0
,在OpenGL 3.0或使用
GL{ARB | EXT}\u framebuffer\u对象时返回它是完全合理的。您可以在OpenGL 4.0手册页面中找到此文档,您可以参考

请注意,
glGet(…)
实际上并没有记录所有可能的返回值。它实际上是告诉您默认值,即单缓冲帧缓冲区的
glu-FRONT
和双缓冲帧缓冲区的
GL-BACK


您需要返回到
glDrawBuffer(…)
API参考以获取所有有效值的列表。奇怪的是,GL 3.0手册页面忽略了
GL\u COLOR\u ATTACHMENT0
。可以找到的实际规范要彻底得多,但如果您不知道要找什么,可能会让您不知所措。

这是阅读OpenGL 2的一个不幸结果。0手册页,它们不反映现代API

0x8CE0
GL\u COLOR\u ATTACHMENT0
,在OpenGL 3.0或使用
GL{ARB | EXT}\u framebuffer\u对象时返回它是完全合理的。您可以在OpenGL 4.0手册页面中找到此文档,您可以参考

请注意,
glGet(…)
实际上并没有记录所有可能的返回值。它实际上是告诉您默认值,即单缓冲帧缓冲区的
glu-FRONT
和双缓冲帧缓冲区的
GL-BACK


您需要返回到
glDrawBuffer(…)
API参考所有有效值的列表。奇怪的是,GL 3.0手册页面省略了
GL\u COLOR\u ATTACHMENT0
。可以找到的实际规范要彻底得多,但如果你不知道你在找什么,你可能会不知所措。

我假设我的OpenGL版本是2,就像我执行这个时一样e> glGetString(GL|U版本)
我得到:
2.1 NVIDIA-10.0.19 310.90.10.05b12
。那么我如何找到我的OpenGL版本呢?@Mondkin:这是你的GL版本,但Qt使用的是
GL|ARB|EXT}_framebuffer_对象
的扩展。您使用的是Qt的framebuffer类吗?我没有显式地这样做,但检查时它说:“所有渲染都发生在OpenGL framebuffer对象中。”这就是你指的同一个Qt帧缓冲区吗?@Mondikin:是的,就是这个。这就解释了为什么你的绘制缓冲区是一个颜色附件。它绘制到FBO中,而不是直接绘制到窗口。我假设我的OpenGL版本是2,就像我执行这个
glGetString(GL\U版本)时一样
我得到:
2.1 NVIDIA-10.0.19 310.90.10.05b12
。那么我该如何找到我的OpenGL版本呢?@Mondkin:这是你的GL版本,但是Qt使用了
GL{ARB|EXT}framebuffer_对象
扩展。你在使用Qt的framebuffer类吗?我没有明确地这么做,但在检查时它说:“所有渲染都发生在OpenGL帧缓冲区对象中。”这就是您所指的Qt帧缓冲区吗?@Mondikin:是的,就是那个。这解释了为什么您的绘制缓冲区是一个颜色附件。它绘制到FBO中,而不是直接绘制到窗口。