我有一个带有 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 documentation我希望它返回:GL_FRONT
即 0x0404
或 GL_BACK
即 0x0405
。
我在这些行之后调用了 glGetError()
,但它返回了 0
。
我认为返回值可能是这些宏的 Or-ed 组合,但它会包含所有这些宏:GL_BACK
、GL_FRONT
和其他位。
那么,36064
是什么意思?
(如果有帮助,我正在使用 Qt 的 OpenGL 包装器:QOpenGLFunctions
)
最佳答案
这是阅读 OpenGL 2.0 手册页的不幸结果,它们不反射(reflect)现代 API。
0x8CE0 是 GL_COLOR_ATTACHMENT0
,在 OpenGL 3.0 或使用 GL_{ARB|EXT}_framebuffer_object
时返回它是完全合理的>。您将在 OpenGL 4.0 手册页中找到此文档,您可以引用 here .
glGet (...)
实际上并未记录所有可能的返回值。它实际上是在告诉您默认值,即单缓冲帧缓冲区的 GL_FRONT
和双缓冲的 GL_BACK
。
您需要引用 glDrawBuffer (...)
API 引用以获取所有有效值的列表。奇怪的是,GL 3.0 手册页省略了 GL_COLOR_ATTACHMENT0
。实际规范,可以找到here相当彻底,但可能会让您不知所措,除非您知道自己在寻找什么。
关于c++ - glGetIntegerv 返回 36064,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28954217/