平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0
数据加载中……

Opengl Frame Buffer扩展理解和使用

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

posted on 2005-09-14 00:05 linghuye 阅读(3226) 评论(2)  编辑 收藏 引用 所属分类: 3D图形学研究

评论

# re: Opengl Frame Buffer扩展理解和使用  回复  更多评论   

阁下文章对我极有帮助,非常感谢。
2006-08-21 17:27 | QSlash

# re: Opengl Frame Buffer扩展理解和使用  回复  更多评论   

正要用这块知识,学习了,非常感谢!
2010-09-09 15:52 | foryond
只有注册用户登录后才能发表评论。