OpenGL glRenderbufferStorage 函式詳解
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,
//將緩衝區渲染為深度緩衝區
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);