c++ - 有人试过使用 glMultiDrawArraysIndirect 吗?编译器找不到函数

标签 c++ opengl

有人成功使用过 glMultiDrawArraysIndirect 吗?我包含了最新的 glext.h,但编译器似乎无法找到该函数。在包含 glext.h 之前我是否需要定义一些东西(#define ...)?

    error: ‘GL_DRAW_INDIRECT_BUFFER’ was not declared in this scope
    error: ‘glMultiDrawArraysIndirect’ was not declared in this scope

我正在尝试实现 OpenGL superBible 示例。以下是源代码的片段:

    GLuint indirect_draw_buffer;
    glGenBuffers(1, &indirect_draw_buffer);
    glBindBuffer(GL_DRAW_INDIRECT_BUFFER, indirect_draw_buffer);
    glBufferData(GL_DRAW_INDIRECT_BUFFER,
             NUM_DRAWS * sizeof(DrawArraysIndirectCommand),
             draws,
             GL_STATIC_DRAW);
    ....
    // fill the buffers
    ..... 
    glMultiDrawArraysIndirect (GL_TRIANGLES,  NULL, 3, 0);

我在 Linux 上安装了 Quadro 2000 和最新的驱动程序 (NVidia 319.60)。

最佳答案

你不能简单地#include <glext.h>并期望这个问题能够自行解决。这个头文件只是等式的一半,它定义了 OpenGL 扩展使用的基本常量、函数签名、typedef 等,但并没有真正解决扩展 OpenGL 的问题。

在大多数平台上,您可以保证使用特定版本的 OpenGL(在 Windows 上为 1.1),并且要使用比此版本更新的 OpenGL 的任何部分,您必须在运行时扩展 API/强>。 linux也不异常(exception),为了使用glMultiDrawArraysIndirect (...)您必须在运行时从驱动程序加载此扩展。这通常意味着设置在运行时之前为 NULL 的函数指针,以使编译器/链接器满意。

到目前为止,最简单的解决方案是使用类似 GLEW 的方法。 ,它将在运行时加载您的驱动程序支持的所有扩展,最高版本为 OpenGL 4.4。它将取代 glext.h ,您所要做的就是在设置渲染上下文后初始化库。

关于c++ - 有人试过使用 glMultiDrawArraysIndirect 吗?编译器找不到函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19990392/

相关文章:

c++ - 在 Qt 中更改语言环境

c++ - 这个 Char Array 应该如何? (C++ 示例之旅)

c++ - 屏幕显示脚本中 '.' token 之前的预期不合格 ID

c++ - QT的opengl问题

c++ - OpenGL 中的多个视口(viewport)和文本......也许是相机?

c++ - opengl中递归函数内部的时间延迟

c++ - 在 C++ 中使用流打印具有正确缩进的结构化对象

c++ - 多线程上的信号量和临界区问题

c++ - OpenGL 如何渲染它的三角形?

c++ - OpenGL加载OBJ模型,纹理失真