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

Geo*_*rge 1 opengl

请考虑以下OpenGL代码段:

GLuint vao;
glCreateVertexArrays(1, glBindVertexArray(&vao));    
Run Code Online (Sandbox Code Playgroud)

我的印象是这段代码的作用是什么

  1. 创建一个类型的指针,该指针GLuint最终将指向OpenGL顶点数组对象.这个指针的名字是vao.
  2. 通过OpenGL间接为实际的顶点数组对象分配内存(即,不使用mallocC或newC++).这样做的方法是通过该功能glCreateVertexArrays.此函数还使指针vao指向顶点数组对象.

我的理解是否正确?如果是这样,在(1)中,为什么指针的类型GLuint没有明确定义为指针类型(例如*在C/C++中或使用OpenGL类型GLintptr)?

ybu*_*ill 5

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

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

GLuint vao;
glCreateVertexArrays(1, &vao);
Run Code Online (Sandbox Code Playgroud)

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

  • @George:差不多.这就是所有[OpenGL Objects](https://www.opengl.org/wiki/OpenGL_Object)的工作方式. (2认同)