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 方法详解
设置缓冲区对象的通用方法:
//帧缓冲区对象
glGenFramebuffers(1,& fboId);
glBindFramebuffer(GL_FRAMEBUFFER,fboId);
//渲染缓冲区作为颜色缓冲区
glGenRenderbuffers(1,& colorBuffer);
glBindRenderbuffer(GL_RENDERBUFFER,colorBuffer);
glRenderbufferStorage(GL_RENDERBUFFER,GL_RGBA,width,height);
glBindRenderbuffer(GL_RENDERBUFFER,0);
//将渲染缓冲区作为颜色缓冲区附加到fbo
glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_RENDERBUFFER,colorBuffer);
//将缓冲区渲染为深度缓冲区
glGenRenderbuffers(1,& depthBuffer);
glBindRenderbuffer(GL_RENDERBUFFER,depthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH_COMPONENT,width,height);
glBindRenderbuffer(GL_RENDERBUFFER,0);
//将渲染缓冲区作为深度缓冲区附加到fbo
glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER,depthBuffer);
glGenRenderbuffers(1,& stencilBuffer);
glBindRenderbuffer(GL_RENDERBUFFER,stencilBuffer);
glRenderbufferStorage(GL_RENDERBUFFER,GL_STENCIL_INDEX,width,height);
glBindRenderbuffer(GL_RENDERBUFFER,0);
//将渲染缓冲区附加到fbo作为模板缓冲区
glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_STENCIL_BUFFER,GL_RENDERBUFFER,stencilBuffer);
参考文章:http://www.ithao123.cn/content-704097.html