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

标签 opengl

考虑以下 OpenGL 代码片段:

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

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

  1. 创建一个 GLuint 类型的指针,它最终将指向一个 OpenGL 顶点数组对象。这个指针的名字是vao
  2. 通过 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 关联的状态。它是一个复杂的状态,有很多簿记,比 mallocnew 复杂得多。 (特别是 malloc 不能用于分配 GPU 内存。)

关于opengl - 定义指向 OpenGL 顶点数组对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40310019/

相关文章:

c - OpenGL 3.3 核心配置文件 - glDrawArrays 无声地失败

c++ - 从YouTube复制的OpenGl着色器中的语法错误

opengl - CUDA从内核直接写入OpenGL默认BackBuffer的ColorAttachment(GL_BACK)

c++ - 将 png 作为纹理加载并将其绑定(bind)到球体

c++ - 使用 WGL 创建现代 OpenGL 上下文?

c++ - 使用 OpenGL 围绕枢轴点旋转

C++ 奇怪的函数指针行为

c++ - Eclipse CDT + MinGW + GLEW,键入对 `LoadShaders(char const*, char const*)' 的 undefined reference

c++ - 仅更新选定三角形的颜色,VBO 更新

c++ - libQGLViewer如何在不清除缓冲区的情况下绘制