PBO(Pixel Buffer Object),将像素数据存储在显存中。
优点:
1、快速的像素数据传递,它采用了一种叫DMA(Direct Memory Access)的技术,无需CPU介入2、 高效并不在于传输更快,而在于与硬件相关的异步调用方式,调用之后CPU即返回执行其它操作(使用DMA方式的传输、由OpenGL直接控制)
3、在单个PBO情况下并不能得到很好的效果,毕竟传输过程仍然存在(但速度可能变快,比如显存内部的数据传输),但其异步性就提供了双PBO实现的可能性,用双PBO来进行加速
左图是传统的加载一个纹理的示意图,可以看到,首先将纹理图像读到内存,然后再从内存拷贝到纹理对象中,这两个过程均需CPU的参与;而右图采用了PBO加载纹理,首先将像素数据加载到PBO中,然后通过DMA方式传送到纹理对象,最后一步不需要CPU参与。


创建PBO:
1. 用glGenBuffersARB()生成缓存对象;
2. 用glBindBufferARB()绑定缓存对象;
3. 用glBufferDataARB()将像素数据拷贝到缓存对象。
映射PBO:
void* glMapBufferARB(GLenum target, GLenum access);
GLboolean glUnmapBufferARB(GLenum target);
几个参数的释疑:
GL_PIXEL_PACK_BUFFER_ARB 将像素数据传给PBO
GL_P

PBO(Pixel Buffer Object)是OpenGL的一种特性,利用显存提高像素数据处理效率。它通过异步操作减少CPU参与,尤其是通过双PBO实现数据传输加速。创建PBO包括生成缓存对象、绑定和填充数据。映射PBO涉及GL_PIXEL_PACK_BUFFER_ARB和GL_PIXEL_UNPACK_BUFFER_ARB,分别用于将像素数据传给PBO和从PBO获取数据。PBO在纹理加载、读取帧缓存和纹理数据传输等方面有广泛应用。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



