为什么 glMapNamedBufferRange() 使用 GLsizei 作为长度?
Why does glMapNamedBufferRange() use GLsizei for length?
当我看到 OpenGL 规范时,我发现了一些奇怪的东西。
这里是 glMapBufferRange() 和 glMapNamedBufferRange() 的原型:
void *glMapBufferRange( GLenum target,
GLintptr offset,
GLsizeiptr length,
GLbitfield access);
void *glMapNamedBufferRange( GLuint buffer,
GLintptr offset,
GLsizei length,
GLbitfield access);
对于长度参数,glMapNamedBufferRange()使用GLsizei类型,32位整数,而glMapBufferRange()使用GLsizeiptr,其大小>= sizeof(void*)。
根据规范,不可能使用 glMapNamedBufferRange() 映射很长范围的缓冲区,因为 GLsizei 只是 32 位整数。
另一方面,glMapbufferRange() 可以映射 64 位平台中的所有地址范围。
为什么只有 glMapNamedBufferRange() 有这样的限制,尽管它的目的与 glNamedBufferRange() 非常相似?
编辑:
我发现了类似的情况。事实上,当非命名版本使用 GLsizeptr 时,许多命名缓冲区计数器部分使用 GLsizei。
为什么命名版本缓冲函数有这样的限制?
您正在查看哪个版本的规范? OpenGL specification version 4.6 (pdf) (and the associated gl.xml
file) 清楚地表明 glMapNamedBufferRange
需要 GLsizeiptr
.
您可能正在查看 the man pages, which can sometimes have errors like this。如果您看到类似这样的奇怪内容,请务必先检查实际规格。
当我看到 OpenGL 规范时,我发现了一些奇怪的东西。
这里是 glMapBufferRange() 和 glMapNamedBufferRange() 的原型:
void *glMapBufferRange( GLenum target,
GLintptr offset,
GLsizeiptr length,
GLbitfield access);
void *glMapNamedBufferRange( GLuint buffer,
GLintptr offset,
GLsizei length,
GLbitfield access);
对于长度参数,glMapNamedBufferRange()使用GLsizei类型,32位整数,而glMapBufferRange()使用GLsizeiptr,其大小>= sizeof(void*)。
根据规范,不可能使用 glMapNamedBufferRange() 映射很长范围的缓冲区,因为 GLsizei 只是 32 位整数。
另一方面,glMapbufferRange() 可以映射 64 位平台中的所有地址范围。
为什么只有 glMapNamedBufferRange() 有这样的限制,尽管它的目的与 glNamedBufferRange() 非常相似?
编辑:
我发现了类似的情况。事实上,当非命名版本使用 GLsizeptr 时,许多命名缓冲区计数器部分使用 GLsizei。
为什么命名版本缓冲函数有这样的限制?
您正在查看哪个版本的规范? OpenGL specification version 4.6 (pdf) (and the associated gl.xml
file) 清楚地表明 glMapNamedBufferRange
需要 GLsizeiptr
.
您可能正在查看 the man pages, which can sometimes have errors like this。如果您看到类似这样的奇怪内容,请务必先检查实际规格。