我是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]);
我注意到这个程序运行得相当缓慢,于是我开始了解PBOs,并尝试创建一个以期使程序更加流畅。因此,我按照以下方式创建了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中。