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)