为什么glMapNamedBufferRange()使用GLsizei作为长度?

时间:2018-04-18 14:10:51

标签: opengl mapping buffer

当我看到OpenGL规范时,我发现了一些奇怪的东西。

以下是glMapBufferRange()和glMapNamedBufferRange()的原型:

void *glMapBufferRange( GLenum target,
    GLintptr offset,
    GLsizeiptr length,
    GLbitfield access);

void *glMapNamedBufferRange(    GLuint buffer,
    GLintptr offset,
    GLsizei length,
    GLbitfield access);

对于length参数,glMapNamedBufferRange()使用GLsizei类型,它是32位整数,而glMapBufferRange()使用GLsizeiptr,其大小为> = sizeof(void *)。

根据规范,使用glMapNamedBufferRange()无法映射很长的缓冲区,因为GLsizei只有32位整数。

另一方面,glMapbufferRange()可以映射64位平台的所有地址范围。

为什么只有glMapNamedBufferRange()有这样的限制,即使它的目的与glNamedBufferRange()非常相似?

编辑:

我发现了类似的案例。实际上,当非命名版本使用GLsizeptr时,许多命名缓冲区计数器部分都使用GLsizei。

为什么命名版本缓冲区函数有这样的限制?

1 个答案:

答案 0 :(得分:4)

您在看什么版本的规格? OpenGL specification version 4.6 (pdf)(以及associated gl.xml file)明确表示glMapNamedBufferRange需要GLsizeiptr

您可能正在查看the man pages,有时可能会出现错误like this。如果你看到像这样奇怪的东西,请务必先检查实际规格。