考虑以下 OpenGL 代码片段:
GLuint vao;
glCreateVertexArrays(1, glBindVertexArray(&vao));
我的印象是这段代码的作用是
- 创建一个
GLuint
类型的指针,它最终将指向一个 OpenGL 顶点数组对象。这个指针的名字是vao
。 - 通过 OpenGL 为实际的顶点数组对象间接分配内存(即不使用 C 中的
malloc
或 C++ 中的new
)。完成此操作的方法是通过函数glCreateVertexArrays
。此函数还使指针vao
指向顶点数组对象。
我的理解对吗?如果是这样,在 (1) 中,为什么指针的类型是 GLuint
而不是明确定义为指针类型(例如 C/C++ 中的 *
或OpenGL 类型 GLintptr
)?
最佳答案
此代码无效,glBindVertexArray
返回void
因此您不能将其返回值作为参数传递给glCreateVertexArrays
,因为没有。
根据 OpenGL 4.5 配置文件,创建 VAO 的正确方法是:
GLuint vao;
glCreateVertexArrays(1, &vao);
根据 vao
的含义以及为什么它的类型是 GLuint
:它不是指针。它是一个不透明的值,在内部用于在 OpenGL 实现表中定位 VAO。驱动程序可以在 CPU 和/或 GPU 上分配内存,用于存储与 VAO 关联的状态。它是一个复杂的状态,有很多簿记,比 malloc
或 new
复杂得多。 (特别是 malloc
不能用于分配 GPU 内存。)
关于opengl - 定义指向 OpenGL 顶点数组对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40310019/