glGetIntegerv returning 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 文档,我希望它返回:GL_FRONT
哪个是0x0404
的,哪个是GL_BACK
0x0405
的。
我在这些行之后调用了glGetError()
,但它返回0
.
我想返回值可能是这些宏的 Or-ed 组合,但这将包含所有这些宏:GL_BACK
、GL_FRONT
和其他位。
那么,这36064
意味着什么呢?
(如果有帮助,我正在使用Qt的OpenGL包装器:QOpenGLFunctions
)
这是阅读 OpenGL 2.0 手册页的不幸后果,它们并不反映现代 API。
0x8CE0是 GL_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
.可以在这里找到的实际规格要彻底得多,但除非您知道自己在寻找什么,否则可能会让您不知所措。
- ZLib GZIP Returning Z_BUF_ERROR(-5)
- C++:寻找"returning address of local variable..."的更正
- cin.fail() not returning true
- "Warning : No return statement in function returning non-void"是什么意思?
- std::localtime returning null
- 为什么我收到以下错误:"returning reference to temporary [-Werror=return-local-addr]"
- GetComboBoxInfo returning false
- Returning std::vector with std::move
- 如何修复空虚拟方法的"warning: no return statement in function returning non-void [-Wreturn-type]"
- Returning std::make_pair with std::forward
- GetThreadContext() returning 87
- 为什么不触发"returning reference to temporary object"编译器警告?
- MoveFileEx - returning GetLastError(): 17
- 为什么 decltype 在 "auto returning" 函数中是必需的?
- Self-returning class?
- Qt findChild returning 0
- SDL_LoadBMP only returning NULL
- C++11 lambda returning lambda
- cvLoadImage Returning NULL
- glGetIntegerv returning 36064