OpenGL学习归纳 -- buffer的使用总结

本文总结了OpenGL中的buffer概念,包括frame buffer和render buffer的区别及作用。重点介绍了frame buffer object (FBO)的生成及其作为render buffer管理者的作用。详细阐述了render buffer的类型如color buffer、depth buffer和stencil buffer,并讲解了如何生成、分配空间以及与framebuffer绑定的过程。此外,还提及了渲染完成后的呈现方法和资源释放操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. buffer分为frame buffer和render buffer两大类,其中frame buffer相当于render buffer的管理者,frame buffer object即称为FBO,常用于做离屏渲染缓冲等。render buffer则又可分为三类,color buffer / depth buffer / stencil buffer。


2. 生成frame buffer object的API函数:

 glGenFramebuffers(1, &framebuffer);

 glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);

生成render buffer的API函数,render buffer的生成函数是一样的,buffer句柄类型只有在进行分配buffer空间的时候才会确定:

glGenRenderbuffers(1, &renderbuffer);

glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);


2. frame buffer仅仅是管理者,不需要分配空间;render buffer的存储空间的分配,对于不同的render buffer,使用不同的API进行分配,而只有分配空间的时候,render buffer句柄才确定其类型

(1). 最基本的是color buffer,调用EGALContext的OC方法为其分配空间

/* Attaches an EAGLDrawable as storage for the OpenGL ES renderbuffer object bound to <target> */

- (BOOL)renderbufferStorage:(NSUInteger)target fromDrawable:(id<EAGLDrawable>)drawable;

(2). 而depth buffer则可以直接调用openGL本身的API进行分配

glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH_COMPONENT16, width, height);


2. 上面(1)(2)函数是用于生成render buffer的存储空间,生成空间之后,则需要将renderbuffer跟framebuffer进行绑定,调用glFramebufferRenderbuffer函数进行绑定,后面的绘制才能起作用


3. 接下来可以调用OpenGL的函数进行绘制处理,最后则需要调用EGALContext的OC方法进行最终的渲染绘制,这里渲染的是color buffer,这个方法会讲buffer渲染到CALayer上面

- (BOOL)presentRenderbuffer:(NSUInteger)target;


4. 还有一个需要注意的地方是在退出的时候,需要调用glDelegateFramebuffers或者glDeleteRenderbuffers函数删除frame buffer或者render buffer


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值