glGetIntegerv 返回 36064

glGetIntegerv returning 36064

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

在这些渲染指令中,我放入了以下几行,我得到了一个意想不到的结果:

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

这些行打印:360640x8ce0。但是根据 glGet documentation 我希望它是 return: GL_FRONT0x0404GL_BACK0x0405.

我在这些行之后调用了 glGetError(),但它 returns 0.

我认为 return 值可能是这些宏的 Or-ed 组合,但它会包含所有这些宏:GL_BACKGL_FRONT 和其他位。

那么,36064 是什么意思?

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

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

0x8CE0GL_COLOR_ATTACHMENT0,这对于在 OpenGL 3.0 中 return 或使用 GL_{ARB|EXT}_framebuffer_object 来说是完全合理的。您会在 OpenGL 4.0 手册页中找到此文档,您可以参考 here.

请注意,

glGet (...) 实际上并未记录所有可能的 returned 值。它实际上是在告诉您默认值,单缓冲帧缓冲区为 GL_FRONT,双缓冲帧缓冲区为 GL_BACK

您需要返回参考 glDrawBuffer (...) API 参考以获取所有有效值的列表。奇怪的是,GL 3.0 手册页省略了 GL_COLOR_ATTACHMENT0。可以找到 here 的实际规范要全面得多,但除非您知道自己在寻找什么,否则可能会让您不知所措。