【发布时间】:2010-10-19 09:20:34
【问题描述】:
FBO 和 PBO 有什么区别?我应该使用哪一个进行离屏渲染?
【问题讨论】:
标签: opengl
FBO 和 PBO 有什么区别?我应该使用哪一个进行离屏渲染?
【问题讨论】:
标签: opengl
Apple 发布了两个非常不错的 演示 PBO 的示例代码和 FBO。尽管这些是 特定于 Mac,作为示例代码,它们是 在任何平台上都很好,因为 PBO 和 FBO 是 OpenGL 扩展,而不是 窗口系统扩展。
那么所有这些对象是什么?这里是 情况:
【讨论】:
FBO和PBO有什么区别?
更好的问题是它们有何相似之处。他们唯一的相似之处是他们的名字。
Framebuffer Object(注意大写:framebuffer 是一个单词,而不是两个单词)是一个包含多个可用作渲染目标的图像的对象。
如果您想渲染到纹理或只是 non-screen framebuffer,那么您可以使用 FBO。如果您尝试将像素数据异步读取回您的应用程序,或者您尝试将像素数据异步传输到 OpenGL 图像,那么您可以使用 PBO。
他们完全不同。
【讨论】:
我想强调一些东西。
FBO 它不是内存块。我认为它看起来像指针结构。您必须将纹理附加到 FBO 才能使用它。附加纹理后,您现在可以绘制到它以进行屏幕外渲染或第二遍效果。
struct FBO{
AttachColor0 *ptr0;
AttachColor1 *ptr1;
AttachColor2 *ptr2;
AttachDepth *ptr3;
};
另一方面,PBO是内存块“block to hold type of memory”。试着把它想象成x大小的malloc,然后你可以使用memcpy将数据从中复制到纹理/FBO 或它”。
创建中间内存缓冲区以与主机内存接口,并且不停止 OpenGL 绘图会将纹理上传到主机或从主机上传。
【讨论】: