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