istereo

diff src/ES2Renderer.m @ 30:8dd271942543

fixed everything
author John Tsiombikas <nuclear@mutantstargoat.com>
date Thu, 08 Sep 2011 14:52:13 +0300
parents fe1cb1c567cc
children ff055bff6a15
line diff
     1.1 --- a/src/ES2Renderer.m	Thu Sep 08 08:31:15 2011 +0300
     1.2 +++ b/src/ES2Renderer.m	Thu Sep 08 14:52:13 2011 +0300
     1.3 @@ -1,3 +1,4 @@
     1.4 +#include <assert.h>
     1.5  #import "ES2Renderer.h"
     1.6  #include "istereo.h"
     1.7  
     1.8 @@ -17,11 +18,17 @@
     1.9          }
    1.10  
    1.11          // Create default framebuffer object. The backing will be allocated for the current layer in -resizeFromLayer
    1.12 -        glGenFramebuffers(1, &defaultFramebuffer);
    1.13 -        glGenRenderbuffers(1, &colorRenderbuffer);
    1.14 -        glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebuffer);
    1.15 -        glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);
    1.16 -        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorRenderbuffer);
    1.17 +        glGenFramebuffers(1, &fbo);
    1.18 +        glBindFramebuffer(GL_FRAMEBUFFER, fbo);
    1.19 +
    1.20 +        glGenRenderbuffers(1, &rbuf_color);
    1.21 +        glBindRenderbuffer(GL_RENDERBUFFER, rbuf_color);
    1.22 +        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbuf_color);
    1.23 +
    1.24 +		glGenRenderbuffers(1, &rbuf_depth);
    1.25 +		glBindRenderbuffer(GL_RENDERBUFFER, rbuf_depth);
    1.26 +		glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rbuf_depth);
    1.27 +		assert(glGetError() == GL_NO_ERROR);
    1.28  
    1.29  		init();
    1.30      }
    1.31 @@ -34,46 +41,51 @@
    1.32  	redraw();
    1.33      // This application only creates a single default framebuffer which is already bound at this point.
    1.34      // This call is redundant, but needed if dealing with multiple framebuffers.
    1.35 -    //glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebuffer);
    1.36 -    //glViewport(0, 0, backingWidth, backingHeight);
    1.37 +    //glBindFramebuffer(GL_FRAMEBUFFER, fbo);
    1.38 +    //glViewport(0, 0, xsz, ysz);
    1.39  
    1.40      // This call is redundant, but needed if dealing with multiple renderbuffers.
    1.41 -    //glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);
    1.42 +    glBindRenderbuffer(GL_RENDERBUFFER, rbuf_color);
    1.43      [context presentRenderbuffer:GL_RENDERBUFFER];
    1.44  }
    1.45  
    1.46  - (BOOL)resizeFromLayer:(CAEAGLLayer *)layer
    1.47  {
    1.48      // Allocate color buffer backing based on the current layer size
    1.49 -    glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);
    1.50 +    glBindRenderbuffer(GL_RENDERBUFFER, rbuf_color);
    1.51      [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer];
    1.52 -    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &backingWidth);
    1.53 -    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &backingHeight);
    1.54 +    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &xsz);
    1.55 +    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &ysz);
    1.56 +
    1.57 +	glBindRenderbuffer(GL_RENDERBUFFER, rbuf_depth);
    1.58 +	glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, xsz, ysz);
    1.59  
    1.60      if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
    1.61      {
    1.62          NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatus(GL_FRAMEBUFFER));
    1.63          return NO;
    1.64      }
    1.65 +	assert(glGetError() == GL_NO_ERROR);
    1.66  
    1.67 -	reshape(backingWidth, backingHeight);
    1.68 +	reshape(xsz, ysz);
    1.69  
    1.70      return YES;
    1.71  }
    1.72  
    1.73 +
    1.74  - (void)dealloc
    1.75  {
    1.76      // Tear down GL
    1.77 -    if (defaultFramebuffer)
    1.78 +    if (fbo)
    1.79      {
    1.80 -        glDeleteFramebuffers(1, &defaultFramebuffer);
    1.81 -        defaultFramebuffer = 0;
    1.82 +        glDeleteFramebuffers(1, &fbo);
    1.83 +        fbo = 0;
    1.84      }
    1.85  
    1.86 -    if (colorRenderbuffer)
    1.87 +    if (rbuf_color)
    1.88      {
    1.89 -        glDeleteRenderbuffers(1, &colorRenderbuffer);
    1.90 -        colorRenderbuffer = 0;
    1.91 +        glDeleteRenderbuffers(1, &rbuf_color);
    1.92 +        rbuf_color = 0;
    1.93      }
    1.94  
    1.95      if (program)