c++ - glGetIntegerv 返回 36064

标签 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;
    ...
}

这些行打印:360640x8ce0。但是根据glGet documentation我希望它返回:GL_FRONT0x0404GL_BACK0x0405

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

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

那么,36064 是什么意思?

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

最佳答案

这是阅读 OpenGL 2.0 手册页的不幸结果,它们不反射(reflect)现代 API。

0x8CE0GL_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/

相关文章:

c++ - 如何检测 std::integer_sequence 中特定数字的索引?

c++ - 当类创建为 shared_ptr 时,添加到类的附加函数会导致段错误

c++ - 在 Qt 中解析 HTML 的最佳方法是什么?

ios - 如何使用 2D 纹理将 RGB 位图渲染到 GLKView 中?

c - OpenGL,如何为金字塔的侧面提供纯色

c - 如何在用 C 编写的 GLUT 程序上设置关闭操作? (如左上角红色按钮工作)

c++ - 尝试集成外部源代码时出现编译错误

c++ - std::shared_ptr 和 std::experimental::atomic_shared_ptr 有什么区别?

linux - Qt 项目文件没有看到环境变量

c++ - C++ Builder 链接器是否支持函数级链接?