-1

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

    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);
4

1 回答 1

1

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

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

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

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

于 2012-12-29T15:47:15.953 回答