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;
...
}
这些行打印:36064
即 0x8ce0
。但是根据 glGet documentation 我希望它是 return: GL_FRONT
即 0x0404
或 GL_BACK
即 0x0405
.
我在这些行之后调用了 glGetError()
,但它 returns 0
.
我认为 return 值可能是这些宏的 Or-ed 组合,但它会包含所有这些宏:GL_BACK
、GL_FRONT
和其他位。
那么,36064
是什么意思?
(如果有帮助,我正在使用 Qt 的 OpenGL 包装器:QOpenGLFunctions
)
这是阅读 OpenGL 2.0 手册页的不幸结果,它们不反映现代 API。
0x8CE0 是 GL_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 的实际规范要全面得多,但除非您知道自己在寻找什么,否则可能会让您不知所措。
我有一个带有 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 我希望它是 return: GL_FRONT
即 0x0404
或 GL_BACK
即 0x0405
.
我在这些行之后调用了 glGetError()
,但它 returns 0
.
我认为 return 值可能是这些宏的 Or-ed 组合,但它会包含所有这些宏:GL_BACK
、GL_FRONT
和其他位。
那么,36064
是什么意思?
(如果有帮助,我正在使用 Qt 的 OpenGL 包装器:QOpenGLFunctions
)
这是阅读 OpenGL 2.0 手册页的不幸结果,它们不反映现代 API。
0x8CE0 是 GL_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 的实际规范要全面得多,但除非您知道自己在寻找什么,否则可能会让您不知所措。