FrameBuffer作为比PixelBuffer更好的解决方案被提出.
1.使用glGenFramebuffersEXT,glDeleteFramebuffersEXT建立,删除FrameBuffer对象.
2.使用glBindFramebufferEXT绑定当前使用的FrameBuffer对象.如果指定0,则表示使用默认窗口系统的Framebuffer,而若指定自建的Framebuffer对象,则随后的Opengl操作将作用在该Framebuffer上,亦即作用在被Attach到此Framebuffer的映像Image上(Image可以是Texture对象或RenderBuffer对象).但不同于Pixel Buffer,FrameBuffer使用当前的Opengl Context.
3.使用glFramebufferTexture2DEXT将一个Texture对象的Image,Attch到Framebuffer的一个ATTACHMENT槽上,如GL_COLOR_ATTACHMENT0_EXT.
4.使用glGenRenderbuffersEXT,glDeleteRenderbuffersEXT建立,删除RenderBuffer对象.
5.使用glRenderbufferStorageEXT指定RenderBuffer的格式和尺寸.
6.使用glFramebufferRenderbufferEXT将一个RenderBuffer对象的Image,Attch到FrameBuffer的一个ATTACHMENT槽上,如GL_DEPTH_ATTACHMENT_EXT.
7.掌握其本质概念,RenderBuffer和Texture是一个层次上的概念,都是作为图像数据的傀儡表达,其所包含的图像数据称为Image,而FrameBuffer是渲染操作的目标区,它需要Image来支撑,而Texture/RenderBuffer可以提供出它们的Image给FrameBuffer使用.各对象的数据格式定义必须一致,否则操作失败,使用CheckFramebufferStatusEXT检查当前的Framebuffer是否Complete.
8.Framebuffer是一个非常实用的对象,可惜我的Geforce 2还不能支持它,还有那些官僚的ARB,他们真的要毁了Opengl才甘心吗.
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_idFrameBuffer);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_texture, 0);
return (glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_COMPLETE_EXT);
9.ARB版本的FrameBuffer
The default framebuffer for rendering and readback operations is provided by the window system.
Reference:
http://download.nvidia.com/developer/presentations/2005/GDC/OpenGL_Day/OpenGL_FrameBuffer_Object.pdf
http://oss.sgi.com/projects/ogl-sample/registry/EXT/framebuffer_object.txt