如何从opengl FrameBufferObject获取RGB像素用于libx264编码?

时间:2012-12-29 14:19:07

标签: opengl rgb pixels fbo libx264

我想从FrameBufferObject获取RGB像素:fboName。 有什么方法吗? 从GPU到CPU的memmory映射需要花费大量时间吗?

    glGenFramebuffers(1, &fboName);
    glBindFramebuffer(GL_FRAMEBUFFER, fboName);     
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colorTexture, 0);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer);

1 个答案:

答案 0 :(得分:1)

使用glReadPixels从帧缓冲区中读取图像。您可以直接打包到客户端内存,也可以使用中间像素缓冲区对象来实现异步操作和内存映射。

  

从GPU到CPU的内存映射需要花费大量时间吗?

无论如何,您都要将数据从GPU内存复制到系统内存。如果通过内存映射(即通过页面错误触发DMA传输)或通过glGetBufferSubData(使用PBO)或glReadPixels显式完成,则在带宽利用率和性能方面没有太大区别。最重要的是,请求的像素格式与GPU端的数据格式相匹配,否则必须进行代价高昂的转换。

由于你想要将数据提供给libx264我会说使用映射缓冲区效果最好,这样你就可以将前一帧的libx264处理与下一帧的异步传输交错。