直接Stream Video到GPU Texture 内存
在某些场合需要快速的将Video Frame stream到GPU texture,比如要使用GPU渲染从相机过来的帧数据。这时候候就能够将数据直接写入pixel unpack buffer object. Pixel unpack buffer objectOpenGL 支持几种buffer objects,其中用的最多的大概就是vertex buffer object (VBO) 用来存储顶点相干数据。 创建和绑定buffer object的函数: void glGenBuffers(GLsizei n,GLuint *buffers);
void glBindBuffer(GLenum target,GLuint buffer);
在绑定buffer object以后,下1步就是分配GPU存储空间了: void glBufferData(GLenum target,GLsizeiptr size,const void *data,GLenum usage);
分配好空间的buffer object 可使用以下函数更新缓存: void glBufferSubData(GLenum target,GLintptr offset,const void *data); 我们知道当 更新PBO缓冲区PBO作为buffer object,我们可以通过memory map的方式直接得到PBO的指针: void* glMapBufferRange(GLenum target,GLsizeiptr length,GLbitfield access);
函数所返回的指针可以用来更新PBO的内容。当更新终了以后我们需要调用相应的unmap函数唆使数据更新已完成并释放指针。 GLboolean glUnmapBuffer(GLenum target); 使用PBO缓存作为texture像素数据调用texture填充函数更新texture像素信息: glTexImage*,glTexSubImage*,glCompressedTexImage*,glCompressedTexSubImage* 当GL_PIXEL_UNPACK_BUFFER绑定有效的PBO时,这些函数都直接从PBO获得数据源,而不用从系统内存上传数据到GPU. 由于数据已位于GPU,这些函数会立即返回,因此使用这类方式更新texture数据非常高效,固然条件条件是性能非常重要或内存使用有限制的情况下才应当斟酌这类方法! 总结最后总结1下:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |