1. 程式人生 > >OpenGL glRenderbufferStorage 函式詳解

OpenGL glRenderbufferStorage 函式詳解

OpenGL glRenderbufferStorage 函式詳解

glRenderbufferStorage 指定儲存在 renderbuffer 中影象的寬高以及顏色格式,並按照此規格為之分配儲存空間,當一個渲染快取被建立,它沒有任何資料儲存區域,所以我們還要為他分配空間。這可以通過用glRenderbufferStorage()實現。第一個引數必須是GL_RENDERBUFFER。第二個引數可以是用於顏色的(GL_RGBGL_RGBAetc.),用於深度的(GL_DEPTH_COMPONENT),或者是用於模板的格式(GL_STENCIL_INDEX)。Widthheight是渲染快取影象的畫素維度。

widthheight必須比GL_MAX_RENDERBUFFER_SIZE小,否則將會產生GL_UNVALID_VALUE錯誤。

注意在iOS glRenderbufferStorage需要使用 renderbufferStorage:fromDrawable 函式來代替,至於原因請 點選參考 iOS OpenGL renderbufferStorage:fromDrawable 方法詳解

設定緩衝區物件的通用方法:

  //幀緩衝區物件

 glGenFramebuffers1& fboId); 

 glBindFramebufferGL_FRAMEBUFFERfboId);

 

 //渲染緩衝區作為顏色緩衝區

 glGenRenderbuffers1& colorBuffer); 

 glBindRenderbufferGL_RENDERBUFFERcolorBuffer); 

 glRenderbufferStorageGL_RENDERBUFFERGL_RGBAwidthheight); 

 glBindRenderbufferGL_RENDERBUFFER0); 

 //將渲染緩衝區作為顏色緩衝區附加到fbo 

 glFramebufferRenderbufferGL_FRAMEBUFFERGL_COLOR_ATTACHMENT0GL_RENDERBUFFER

colorBuffer); 

 //將緩衝區渲染為深度緩衝區

 glGenRenderbuffers1& depthBuffer); 

 glBindRenderbufferGL_RENDERBUFFERdepthBuffer); 

 glRenderbufferStorageGL_RENDERBUFFERGL_DEPTH_COMPONENTwidthheight); 

 glBindRenderbufferGL_RENDERBUFFER0); 

 //將渲染緩衝區作為深度緩衝區附加到fbo 

 glFramebufferRenderbufferGL_FRAMEBUFFERGL_DEPTH_ATTACHMENTGL_RENDERBUFFERdepthBuffer); 

 glGenRenderbuffers1& stencilBuffer); 

 glBindRenderbufferGL_RENDERBUFFERstencilBuffer); 

 glRenderbufferStorageGL_RENDERBUFFERGL_STENCIL_INDEXwidthheight); 

 glBindRenderbufferGL_RENDERBUFFER0); 

 //將渲染緩衝區附加到fbo作為模板緩衝區

 glFramebufferRenderbufferGL_FRAMEBUFFERGL_STENCIL_BUFFERGL_RENDERBUFFERstencilBuffer);