OpenGL glRenderbufferStorage 函数详解


glRenderbufferStorage 指定存储在 renderbuffer 中图像的宽高以及颜色格式,并按照此规格为之分配存储空间,当一个渲染缓存被创建,它没有任何数据存储区域,所以我们还要为他分配空间。这可以通过用glRenderbufferStorage()实现。第一个参数必须是GL_RENDERBUFFER。第二个参数可以是用于颜色的(GL_RGB,GL_RGBA,etc.),用于深度的(GL_DEPTH_COMPONENT),或者是用于模板的格式(GL_STENCIL_INDEX)。Width和height是渲染缓存图像的像素维度。

width和height必须比GL_MAX_RENDERBUFFER_SIZE小,否则将会产生GL_UNVALID_VALUE错误。


注意在iOS端 glRenderbufferStorage需要使用 renderbufferStorage:fromDrawable 函数来代替,至于原因请 点击参考 iOS OpenGL renderbufferStorage:fromDrawable 方法详解


设置缓冲区对象的通用方法:


  //帧缓冲区对象

(1,& fboId);

(GL_FRAMEBUFFER,fboId);

 

 //渲染缓冲区作为颜色缓冲区

(1,& colorBuffer);

(GL_RENDERBUFFER,colorBuffer);

(GL_RENDERBUFFER,GL_RGBA,width,height);

(GL_RENDERBUFFER,0);

 //将渲染缓冲区作为颜色缓冲区附加到fbo 

(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_RENDERBUFFER,colorBuffer);

 

 //将缓冲区渲染为深度缓冲区

(1,& depthBuffer);

(GL_RENDERBUFFER,depthBuffer);

(GL_RENDERBUFFER,GL_DEPTH_COMPONENT,width,height);

(GL_RENDERBUFFER,0);

 //将渲染缓冲区作为深度缓冲区附加到fbo 

(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER,depthBuffer);

 

(1,& stencilBuffer);

(GL_RENDERBUFFER,stencilBuffer);

(GL_RENDERBUFFER,GL_STENCIL_INDEX,width,height);

(GL_RENDERBUFFER,0);

 //将渲染缓冲区附加到fbo作为模板缓冲区

(GL_FRAMEBUFFER,GL_STENCIL_BUFFER,GL_RENDERBUFFER,stencilBuffer);


参考文章:http://www.ithao123.cn/content-704097.html