glGetIntegerv返回36064

Mon*_*Kin 0 c++ opengl qt

我有一个Qt应用程序QOpenGLWidget.在那个小部件中,我有我的OpenGL函数,它正如我所期望的那样呈现我的场景.

在那些渲染说明中,我放了以下几行,我得到了意想不到的结果:

void MyOpenGLVisualizer::paintGL()
{
    GLint my_val = 0;
    glGetIntegerv(GL_DRAW_BUFFER, &my_val);
    std::cout << my_val << std::endl;
    ...
}
Run Code Online (Sandbox Code Playgroud)

这些行打印:36064这是0x8ce0.但根据glGet文档我希望它返回:GL_FRONT这是0x0404或者GL_BACK0x0405.

glGetError()在这些行之后调用,但它返回0.

我想,也许返回值是这些宏的OR-ED组合,但是这将包含所有的人: GL_BACK,GL_FRONT,等位.

那么,这36064意味着什么?

(如果有帮助,我使用Qt的OpenGL的包装:QOpenGLFunctions)

And*_*man 5

这是阅读OpenGL 2.0手册页面的一个不幸后果,它们并不反映现代API.

0x8CE0GL_COLOR_ATTACHMENT0,这对于在OpenGL 3.0中返回或使用时是完全合理的GL_{ARB|EXT}_framebuffer_object.您将在OpenGL 4.0手册页中找到此文档,您可以在此处参考.

glGet (...)实际上并没有记录所有可能的返回值,请注意.它实际上是在告诉您默认值,它们适用GL_FRONT于单缓冲帧缓冲区和GL_BACK双缓冲帧缓冲区.

您需要返回glDrawBuffer (...)API参考以获取所有有效值的列表.奇怪的是,GL 3.0手册页省略了GL_COLOR_ATTACHMENT0.实际的规格,可以在这里找到相当透彻,但除非你知道你在寻找什么,否则可能会让你感到压力.