我一直在使用glBufferData,我必须指定使用提示(例如GL_DYNAMIC_DRAW).
但是,最近我在Stack Overflow上向我建议使用glMapBuffer或glMapBufferRange修改非连续的顶点数据块.
使用时glMapBuffer,似乎没有任何指定用法提示的点.所以,我的问题如下:
glMapBuffer如果你从未打过glBufferData那个VBO,它是否适用于给定的VBO?glMapBuffervs 的优点/缺点是glBufferData什么?(我知道他们并没有做同样的事情.但似乎通过获取指针glMapBuffer然后写入该地址,你可以做同样的事情glBufferData.)dat*_*olf 18
- 如果你从未在VBO上调用glBufferData,那么在给定的VBO上使用glMapBuffer是否有效?
不,因为要映射一些内存,必须先分配它.
- 如果是这样,OpenGL如何猜测用法,因为它没有给出提示?
它没有.您必须至少调用一次glBufferData来初始化缓冲区对象.如果您不想实际上传数据(因为您将使用glMapBuffer),只需为数据指针传递一个空指针.这与glTexImage类似,其中创建缓冲区/纹理对象,用glBufferSubData/glTexSubImage填充,或者在缓冲区对象的情况下以及通过内存映射填充.
- glMapBuffer vs glBufferData有哪些优点/缺点?(我知道他们并没有做同样的事情.但似乎通过使用glMapBuffer获取指针然后写入该地址,你可以做同样的事情glBufferData.)
glMapBuffer允许您从另一个线程异步写入缓冲区.对于某些实现,OpenGL驱动程序可以让您的进程直接访问GPU的DMA内存,甚至可以更好地访问GPU本身的内存.例如,在具有集成图形的SoC架构上.
| 归档时间: |
|
| 查看次数: |
6413 次 |
| 最近记录: |