OpenGL notes

来源:互联网 发布:阿里安全软件 编辑:程序博客网 时间:2024/05/19 19:13


1. Enable stencil butter in OpenGL ES

http://stackoverflow.com/questions/2621013/how-to-create-a-fbo-with-stencil-buffer-in-opengl-es-2-0


if (m_context && !m_defaultFramebuffer)

   {

      [EAGLContextsetCurrentContext:m_context];

      

      glGenFramebuffers(1, &m_defaultFramebuffer);

      glBindFramebuffer(GL_FRAMEBUFFER,m_defaultFramebuffer);

      

      glGenRenderbuffers(1, &m_colorRenderbuffer);

      glBindRenderbuffer(GL_RENDERBUFFER,m_colorRenderbuffer);

      

      [m_contextrenderbufferStorage:GL_RENDERBUFFERfromDrawable:(CAEAGLLayer *)self.layer];

      

      glGetRenderbufferParameteriv(GL_RENDERBUFFER,GL_RENDERBUFFER_WIDTH, &m_framebufferWidth);

      glGetRenderbufferParameteriv(GL_RENDERBUFFER,GL_RENDERBUFFER_HEIGHT, &m_framebufferHeight);

      

      glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,m_colorRenderbuffer);

    

       GLuint stencilRenderbuffer;

       glGenRenderbuffers(1, &stencilRenderbuffer);

       glBindRenderbuffer(GL_RENDERBUFFER, stencilRenderbuffer);

       glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH24_STENCIL8_OES, m_framebufferWidth,m_framebufferHeight);

       glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, stencilRenderbuffer);

       glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, stencilRenderbuffer);

      

      if (glCheckFramebufferStatus(GL_FRAMEBUFFER) !=GL_FRAMEBUFFER_COMPLETE)

      {

         NSLog(@"Failed to make complete framebuffer object %x",glCheckFramebufferStatus(GL_FRAMEBUFFER));

      }

   }