Я использую OpengGL PBO для рендеринга YUV-данных видео, но я хочу рендерить изображение по умолчанию перед рендерингом YUV-данных, в изображении по умолчанию записывается «video is loading ...».
создать буфер PBO :
_pbo = createPBuffer(_ffReader._screenW,_ffReader._screenH + _ffReader._screenH/2);
обновить текстуру :
void updateTexture(FrameInfor* data)
{
int w = _ffReader._screenW;
int h = _ffReader._screenH + _ffReader._screenH/2;
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, _pbo);
GLubyte* dst = (GLubyte*)glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY);
if( dst != 0)
{
memcpy(dst,data->_data->data[0],_ffReader._screenW * _ffReader._screenH);
updateImage(dst,0, _ffReader._screenH,_ffReader._screenW/2,_ffReader._screenH/2,data->_data->data[1]);
updateImage(dst,_ffReader._screenW/2, _ffReader._screenH,_ffReader._screenW/2,_ffReader._screenH/2,data->_data->data[2]);
glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
}
glBindTexture(GL_TEXTURE_2D,_textureYUV);
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,w,h,GL_ALPHA,GL_UNSIGNED_BYTE,0);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
}
это функция для создания буфера PBO:
unsigned createPBuffer(int w,int h)
{
unsigned pbuffer = 0;
glGenBuffers(1, &pbuffer);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbuffer);
glBufferData(GL_PIXEL_UNPACK_BUFFER, w* h, 0, GL_STREAM_DRAW);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
return pbuffer;
}
так, как я мог поместить изображение по умолчанию перед рендерингом данных YUV?