考虑以下OpenGL代码片段:
GLuint vao;
glCreateVertexArrays(1, glBindVertexArray(&vao));
我认为这段代码的作用是
GLuint
的指针,该指针最终将指向OpenGL顶点数组对象。该指针的名称为vao
。malloc
或在C ++中不使用new
)。这样做的方法是通过函数glCreateVertexArrays
。此函数还使指针vao
指向顶点数组对象。我的理解是否正确?如果是这样,在(1)中,为什么指针GLuint
的类型没有明确定义为指针类型(例如在C / C ++中使用*
或使用OpenGL类型{{1} })?
答案 0 :(得分:5)
此代码无效,glBindVertexArray
返回void
,因此您无法将其返回值作为参数传递给glCreateVertexArrays
,因为没有。
根据OpenGL 4.5配置文件创建VAO的正确方法是:
GLuint vao;
glCreateVertexArrays(1, &vao);
根据vao
的含义及其类型为GLuint
的原因:不是指针。它是一个不透明的值,在内部用于在OpenGL实现表中定位VAO。驱动程序可以在CPU和/或GPU上分配存储器,用于存储与VAO相关联的状态。这是一个复杂的状态,有相当多的簿记,比malloc
或new
更复杂。 (特别是malloc
不能用于分配GPU内存。)