定义指向OpenGL顶点数组对象的指针

时间:2016-10-28 17:10:57

标签: opengl

考虑以下OpenGL代码片段:

GLuint vao;
glCreateVertexArrays(1, glBindVertexArray(&vao));    

我认为这段代码的作用是

  1. 创建类型为GLuint的指针,该指针最终将指向OpenGL顶点数组对象。该指针的名称为vao
  2. 通过OpenGL 间接为实际的顶点数组对象分配内存(即,在C中不使用malloc或在C ++中不使用new)。这样做的方法是通过函数glCreateVertexArrays。此函数还使指针vao指向顶点数组对象。
  3. 我的理解是否正确?如果是这样,在(1)中,为什么指针GLuint的类型没有明确定义为指针类型(例如在C / C ++中使用*或使用OpenGL类型{{1} })?

1 个答案:

答案 0 :(得分:5)

此代码无效,glBindVertexArray返回void,因此您无法将其返回值作为参数传递给glCreateVertexArrays,因为没有。

根据OpenGL 4.5配置文件创建VAO的正确方法是:

GLuint vao;
glCreateVertexArrays(1, &vao);

根据vao的含义及其类型为GLuint的原因:不是指针。它是一个不透明的值,在内部用于在OpenGL实现表中定位VAO。驱动程序可以在CPU和/或GPU上分配存储器,用于存储与VAO相关联的状态。这是一个复杂的状态,有相当多的簿记,比mallocnew更复杂。 (特别是malloc不能用于分配GPU内存。)