gpt4 book ai didi

opengl - glBufferStorage 和 glBufferData 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 14:40:42 28 4
gpt4 key购买 nike

glBufferStorage creates a new immutable data store for the buffer object currently bound to target​. The size of the data store is specified by size​. If an initial data is available, its address may be supplied in data​. Otherwise, to create an uninitialized data store, data​ should be NULL​.



不可变意味着我不能改变它,对吗?但是,“未初始化的数据”将毫无意义。

但它并不是真正不可变的,因为我们可以指定 GL_DYNAMIC_STORAGE_BIT​
那么glBufferStorage和glBufferData有什么区别呢?

最佳答案

正如你所知道的,这与 glTexStorage* (...) 背后的原理相同。 .实际上,您与 API 签订了一份契约(Contract),其中规定您永远不会被允许更改对象的某些属性,作为交换,这会赋予对象不可变的状态,并允许您执行通常无法使用它执行的操作。

纹理 View 是一个有趣的例子,其中不可变纹理的内部图像数据可以在多个纹理对象之间共享,甚至可以重新解释其格式/尺寸(例如,可以共享和使用 2D 阵列纹理的 1 个切片,就好像它是普通的 2D 纹理)。

对于顶点缓冲区,不可变存储打开了一类性能优化(例如持久映射内存),如果您可以随时更改缓冲区的大小,则这些优化是不可能的。您创建了一个大小永远无法更改的缓冲区,但您仍然可以随时使用 glBufferSubData* (...) 向其发送新数据。命令或在内存映射时写入缓冲区。

glBufferData (...) ,您可以在同一个对象上多次调用该命令,它将孤立旧内存并分配新存储。与 glBufferStorage (...) ,缓冲区的大小是为对象的生命周期设置的(不可变),调用 GL_INVALID_OPERATION 是一个错误( glBufferStorage (...) )一旦它被永久分配。

简而言之,不可变的是数据存储(存储特性),而不是实际数据。

关于opengl - glBufferStorage 和 glBufferData 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27810542/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com