【发布时间】:2017-04-10 07:32:15
【问题描述】:
我是 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。
【问题讨论】: