2014-11-05 35 views
5

基本上就是这样,为什么glBufferData需要一个指针而不是int?这个arg应该是缓冲区对象的大小,那为什么不用GLsizei呢?上glBufferData https://www.opengl.org/sdk/docs/man/html/glBufferData.xhtmlglBufferData第二个参数是GLsizeiptr而不是GLsizei,为什么?

+3

这不是一个指针。它是一个与指针相同大小的整数类型。 – 2014-11-05 13:20:18

+0

@BenVoigt:这是一个答案,而不是评论:) – datenwolf 2014-11-05 13:35:17

+0

@datenwolf:不,我没有解释为什么这个大小的整数比那个更受欢迎。 – 2014-11-05 13:38:43

回答

10

当顶点缓冲器对象是introduced via the OpenGL extension mechanism,新型GLsizeiptrARB创建和下面的理由

OpenGL的文档被提供:

什么类型应<偏移>和<大小>参数使用?

已解决:我们定义了可在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您在函数签名今天所看到的。

相关问题