我想从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);
答案 0 :(得分:1)
使用glReadPixels
从帧缓冲区中读取图像。您可以直接打包到客户端内存,也可以使用中间像素缓冲区对象来实现异步操作和内存映射。
从GPU到CPU的内存映射需要花费大量时间吗?
无论如何,您都要将数据从GPU内存复制到系统内存。如果通过内存映射(即通过页面错误触发DMA传输)或通过glGetBufferSubData(使用PBO)或glReadPixels显式完成,则在带宽利用率和性能方面没有太大区别。最重要的是,请求的像素格式与GPU端的数据格式相匹配,否则必须进行代价高昂的转换。
由于你想要将数据提供给libx264
我会说使用映射缓冲区效果最好,这样你就可以将前一帧的libx264处理与下一帧的异步传输交错。