glGetIntegerv returning 36064

glGetIntegerv returning 36064

本文关键字:36064 returning glGetIntegerv      更新时间:2023-10-16

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

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

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

这些行打印:36064这是0x8ce0。但是根据 glGet 文档,我希望它返回:GL_FRONT哪个是0x0404的,哪个是GL_BACK 0x0405的。

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

我想返回值可能是这些宏的 Or-ed 组合,但这将包含所有这些宏:GL_BACKGL_FRONT 和其他位。

那么,这36064意味着什么呢?

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

这是阅读 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 .可以在这里找到的实际规格要彻底得多,但除非您知道自己在寻找什么,否则可能会让您不知所措。