基本上就是这样,为什么glBufferData采用指针而不是int?这个arg应该是缓冲对象的大小,为什么不用GLsizei?
glBufferData https://www.opengl.org/sdk/docs/man/html/glBufferData.xhtml
上的OpenGL doc答案 0 :(得分:10)
当顶点缓冲区对象为introduced via the OpenGL extension mechanism时,会创建一个新类型GLsizeiptrARB
,并提供以下基本原理:
应该< offset>的类型和< size>参数使用?
已解决:我们定义了可在64位上运行良好的新类型 系统,类似于C的“intptr_t”。新型“GLintptrARB” 只要预期,就应该用它代替GLint 价值可能会超过20亿。 新类型“GLsizeiptrARB” 应该在任何预期时用来代替GLsizei 计数可能超过20亿。两种类型都定义为 有符号整数,足以包含任何指针值。作为一个 结果,它们自然地扩展到系统上的大量位 使用64位甚至更大的指针。
此扩展中引入的偏移是键入的GLintptrARB, 与其他必须非负的GL参数一致, 但它们本质上是算术的(不是uint),并且不是大小;对于 例如,TexSubImage * D的xoffset参数是GLint类型。 缓冲区大小为GLsizeiptrARB类型。
考虑使这些类型无符号的想法,但是 最终以支持缓冲区扩大为由拒绝 超过2 GB在32位系统上并不重要。
当此扩展程序被接受到核心OpenGL中时,该类型的扩展兼容类型GLsizeiptrARB
获得了您今天在函数签名中看到的标准化名称GLsizeiptr
。