C++ glGetIntegerv返回36064
我有一个带有C++ glGetIntegerv返回36064,c++,qt,opengl,C++,Qt,Opengl,我有一个带有QOpenGLWidget的Qt应用程序。在这个小部件中,我有我的OpenGL函数,它们按照我的预期渲染我的场景 在这些渲染说明中,我添加了以下几行,以获得意外的结果: void MyOpenGLVisualizer::paintGL() { GLint my_val = 0; glGetIntegerv(GL_DRAW_BUFFER, &my_val); std::cout << my_val << std::endl;
QOpenGLWidget
的Qt应用程序。在这个小部件中,我有我的OpenGL函数,它们按照我的预期渲染我的场景
在这些渲染说明中,我添加了以下几行,以获得意外的结果:
void MyOpenGLVisualizer::paintGL()
{
GLint my_val = 0;
glGetIntegerv(GL_DRAW_BUFFER, &my_val);
std::cout << my_val << std::endl;
...
}
void MyOpenGLVisualizer::paintGL()
{
闪烁my_val=0;
glGetIntegerv(GL\u DRAW\u BUFFER和my\u val);
std::cout这是阅读OpenGL2.0手册页面的不幸结果,它们没有反映现代API
0x8CE0是GL\u COLOR\u ATTACHMENT0
,在OpenGL 3.0或使用GL{ARB | EXT}\u framebuffer\u对象时返回它是完全合理的。您可以在OpenGL 4.0手册页面中找到此文档,您可以参考
请注意,glGet(…)
实际上并没有记录所有可能的返回值。它实际上是告诉您默认值,即单缓冲帧缓冲区的glu-FRONT
和双缓冲帧缓冲区的GL-BACK
您需要返回到glDrawBuffer(…)
API参考以获取所有有效值的列表。奇怪的是,GL 3.0手册页面忽略了GL\u COLOR\u ATTACHMENT0
。可以找到的实际规范要彻底得多,但如果您不知道要找什么,可能会让您不知所措。这是阅读OpenGL 2的一个不幸结果。0手册页,它们不反映现代API
0x8CE0是GL\u COLOR\u ATTACHMENT0
,在OpenGL 3.0或使用GL{ARB | EXT}\u framebuffer\u对象时返回它是完全合理的。您可以在OpenGL 4.0手册页面中找到此文档,您可以参考
请注意,glGet(…)
实际上并没有记录所有可能的返回值。它实际上是告诉您默认值,即单缓冲帧缓冲区的glu-FRONT
和双缓冲帧缓冲区的GL-BACK
您需要返回到glDrawBuffer(…)
API参考所有有效值的列表。奇怪的是,GL 3.0手册页面省略了GL\u COLOR\u ATTACHMENT0
。可以找到的实际规范要彻底得多,但如果你不知道你在找什么,你可能会不知所措。我假设我的OpenGL版本是2,就像我执行这个时一样e> glGetString(GL|U版本)
我得到:2.1 NVIDIA-10.0.19 310.90.10.05b12
。那么我如何找到我的OpenGL版本呢?@Mondkin:这是你的GL版本,但Qt使用的是GL|ARB|EXT}_framebuffer_对象
的扩展。您使用的是Qt的framebuffer类吗?我没有显式地这样做,但检查时它说:“所有渲染都发生在OpenGL framebuffer对象中。”这就是你指的同一个Qt帧缓冲区吗?@Mondikin:是的,就是这个。这就解释了为什么你的绘制缓冲区是一个颜色附件。它绘制到FBO中,而不是直接绘制到窗口。我假设我的OpenGL版本是2,就像我执行这个glGetString(GL\U版本)时一样
我得到:2.1 NVIDIA-10.0.19 310.90.10.05b12
。那么我该如何找到我的OpenGL版本呢?@Mondkin:这是你的GL版本,但是Qt使用了GL{ARB|EXT}framebuffer_对象
扩展。你在使用Qt的framebuffer类吗?我没有明确地这么做,但在检查时它说:“所有渲染都发生在OpenGL帧缓冲区对象中。”这就是您所指的Qt帧缓冲区吗?@Mondikin:是的,就是那个。这解释了为什么您的绘制缓冲区是一个颜色附件。它绘制到FBO中,而不是直接绘制到窗口。