客户端、缓冲区、纹理内存以及帧缓存之间数据传输方式如下。
从图中可以看中,PBO在数据传输中起到核心作用。其核心作用表现在以下两点:
一、client、texture、framebuffer(render buffer)与pbo可分别通过glbufferdata(),glgetteximage(),glreadpixel()进行pack操作以及分别通过glmapbuffer(),glteximage(),glwritepixel()进行unpack操作。
二、pbo与texture之间的数据传输“优先级”要高于client与pbo之间的数据传输。例如:
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,pboID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
此时如果pboID不为0,则数据不会从客户端指针data进行拷贝,而是从pbo进行拷贝
If a non-zero named buffer object is bound to the GL_PIXEL_UNPACK_BUFFER target (see glBindBuffer) while a texture image is specified, data is treated as a byte offset into the buffer object's data store.
三、client 与texture client->texture为unpack
本文探讨了在OpenGL中,客户端、PBO(像素缓冲对象)、纹理内存和帧缓存之间的数据传输方式。重点指出PBO作为数据传输核心,通过gl*Data和gl*Image等函数实现pack和unpack操作。特别地,PBO到纹理的数据传输优先级高于客户端到PBO的传输。当指定非零的PBO时,数据会直接从PBO拷贝,而非客户端指针。
1732

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



