我是 OpenGL 的新手,目前正在将 2D 纹理的内容复制回 CPU 内存,如下所示:
std::vector<unsigned char> frame-data(width * height * 4);
glBindTexture(GL_TEXTURE_2D, tid);
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, &frame_data[0]);
我注意到这非常缓慢,我开始阅读有关 PBO 的内容,并想看看这是否能让事情变得更顺利。因此,我按如下方式创建 PBO:
GLuint pbo;
glGenBuffers(1, &pbo);
glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo);
glBufferData(GL_PIXEL_PACK_BUFFER, width*height* 4, NULL, GL_STREAM_READ);
我认为上述行只需执行一次即可初始化 PBO。
我现在的问题是如何将数据从纹理映射到这个 PBO 对象?我知道在那之后我需要打电话glMapBuffer
,但我不确定如何将此纹理附加到我的 PBO。