PBO(pixel buffer object)是储存像素数据的缓冲区对象,主要有两个用途:
1. 上传一帧像素数据到PBO中,GL_UNPACK_ALIGNMENT
1. 上传一帧像素数据到PBO中,GL_UNPACK_ALIGNMENT
2. 从PBO中读取像素到cpu内存空间, GL_PIXEL_PACK_BUFFER
其实不使用PBO也可以上传下载数据,那么PBO好处何在?我们对比两种方式上传yuv420数据:
使用PBO的方法:
1. 创建用于上传像素数据的PBO buffer
glGenBuffers(1, pbo);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbo[i]);
glBufferData(GL_PIXEL_UNPACK_BUFFER, data_size, NULL, GL_STREAM_DRAW);
2. 创建texture用于存储数据,只用GL_RED
glGenTextures(1, texture);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, W, H, 0, GL_RED, GL_UNSIGNED_BYTE, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParame