有人成功使用过 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/