- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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
最佳答案
正如你所知道的,这与 glTexStorage* (...)
背后的原理相同。 .实际上,您与 API 签订了一份契约(Contract),其中规定您永远不会被允许更改对象的某些属性,作为交换,这会赋予对象不可变的状态,并允许您执行通常无法使用它执行的操作。
纹理 View 是一个有趣的例子,其中不可变纹理的内部图像数据可以在多个纹理对象之间共享,甚至可以重新解释其格式/尺寸(例如,可以共享和使用 2D 阵列纹理的 1 个切片,就好像它是普通的 2D 纹理)。
对于顶点缓冲区,不可变存储打开了一类性能优化(例如持久映射内存),如果您可以随时更改缓冲区的大小,则这些优化是不可能的。您创建了一个大小永远无法更改的缓冲区,但您仍然可以随时使用 glBufferSubData* (...)
向其发送新数据。命令或在内存映射时写入缓冲区。
与 glBufferData (...)
,您可以在同一个对象上多次调用该命令,它将孤立旧内存并分配新存储。与 glBufferStorage (...)
,缓冲区的大小是为对象的生命周期设置的(不可变),调用 GL_INVALID_OPERATION
是一个错误( glBufferStorage (...)
)一旦它被永久分配。
简而言之,不可变的是数据存储(存储特性),而不是实际数据。
关于opengl - glBufferStorage 和 glBufferData 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27810542/
我在自己编写的渲染器中实现了持久映射缓冲区,与此处的本教程非常相似: persistent-mapped-buffers-in-opengl 为了简短起见,它的工作原理是这样的: glGenBuffe
glBufferStorage creates a new immutable data store for the buffer object currently bound to target.
我是一名优秀的程序员,十分优秀!