Opengl glBufferData第二个参数是GLsizeiptr而不是GLsizei,为什么?
基本上就是这样,为什么glBufferData使用指针而不是int?这个arg应该是缓冲区对象的大小,那么为什么不使用GLsizei呢Opengl glBufferData第二个参数是GLsizeiptr而不是GLsizei,为什么?,opengl,Opengl,基本上就是这样,为什么glBufferData使用指针而不是int?这个arg应该是缓冲区对象的大小,那么为什么不使用GLsizei呢 glBufferData上的OpenGL文档创建顶点缓冲区对象时,创建了一个新类型GLsizeiptrARB,并提供了以下基本原理: 应该使用什么类型和参数 已解决:我们定义了在64位上运行良好的新类型 系统,类似于C的“intptr\t”。新型“GLintptrARB” 应在以下情况下使用,以代替闪烁: 价值可能超过20亿新类型“GLsizeiptrARB”
glBufferData上的OpenGL文档创建顶点缓冲区对象时,创建了一个新类型
GLsizeiptrARB
,并提供了以下基本原理:
应该使用什么类型和参数
已解决:我们定义了在64位上运行良好的新类型
系统,类似于C的“intptr\t”。新型“GLintptrARB”
应在以下情况下使用,以代替闪烁:
价值可能超过20亿新类型“GLsizeiptrARB”
应在需要时替代GLsizei
这一数字可能超过20亿。这两种类型都定义为
大到足以包含任何指针值的有符号整数。作为一个
结果,它们自然地扩展到系统上更大数量的位
使用64位甚至更大的指针
此扩展中引入的偏移量类型为GLintptrARB,
与必须为非负的其他总账参数一致,
但本质上是算术的(不是uint),不是大小;对于
例如,TexSubImage*D的xoffset参数的类型为GLint。
缓冲区大小键入GLsizeiptrARB
考虑了使这些类型不带符号的想法,但没有成功
最终被拒绝,理由是支持缓冲区更大
超过2GB在32位系统上并不重要
当此扩展被接受到核心OpenGL中时,该类型的扩展兼容类型
GLsizeiptrARB
获得了一个标准化名称GLsizeiptr
,您今天可以在函数签名中看到它。它不是指针。这是一个与指针大小相同的整数类型。@BenVoigt:这是一个答案,不是注释:)@datenwolf:不,我没有解释为什么这个整数比那个整数更可取。@BenVoigt:因为OpenGL GLsizei是32位的。为了适应具有更大地址空间的系统,必须引入一种新类型,这种类型与这种情况下的指针大小相匹配。@DatenWalf:这是我的猜测,但我没有任何证据支持它。是否有一些规范或扩展规范处理大于4GB(或大于2GB,如果签名)?我认为一个好的答案应该参考这样的规范。这些类型的签名太可笑了。