title: glReadPixels only saves 1/4 screen size snapshots
body: <p>I'm working on an Augmented Reality app for a client. The OpenGL and EAGL part has been done in Unity 3D, and implemented into a View in my application.</p>
  
  <p>What i need now, is a button that snaps a screenshot of the OpenGL content, which is the backmost view.</p>
  
  <p>I tried writing it myself, but when i click a button with the assigned IBAction, it only saves 1/4 of the screen (the lower left corner) - though it does save it to the camera roll.</p>
  
  <p>So basically, how can i make it save the entire screensize, instead of just one fourth?</p>
  
  <p>here's my code for the method:</p>
  
  <pre><code>-(IBAction)tagBillede:(id)sender
  {
      UIImage *outputImage = nil;
  
      CGRect s = CGRectMake(0, 0, 320, 480);            
      uint8_t *buffer = (uint8_t *) malloc(s.size.width * s.size.height * 4);
  
      if (!buffer) goto error;
  
      glReadPixels(0, 0, s.size.width, s.size.height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);    
  
      CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, buffer, s.size.width * s.size.height * 4, NULL);
  
      if (!ref) goto error;
  
      CGImageRef iref = CGImageCreate(s.size.width, s.size.height, 8, 32, s.size.width * 4, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrderDefault, ref, NULL, true, kCGRenderingIntentDefault);
  
      if (!iref) goto error;        
  
      size_t width = CGImageGetWidth(iref);    
      size_t height = CGImageGetHeight(iref);    
      size_t length = width * height * 4;            
      uint32_t *pixels = (uint32_t *)malloc(length);
  
      if (!pixels) goto error;
  
      CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width * 4,    
          CGImageGetColorSpace(iref), kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Big);
  
      if (!context) goto error;            
  
      CGAffineTransform transform = CGAffineTransformIdentity;    
      transform = CGAffineTransformMakeTranslation(0.0f, height);    
      transform = CGAffineTransformScale(transform, 1.0, -1.0);    
      CGContextConcatCTM(context, transform);            
      CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, width, height), iref);         
      CGImageRef outputRef = CGBitmapContextCreateImage(context);
  
      if (!outputRef) goto error;
  
      outputImage = [UIImage imageWithCGImage: outputRef]; 
  
      if (!outputImage) goto error;    
  
      CGDataProviderRelease(ref);   
      CGImageRelease(iref);    
      CGContextRelease(context);    
      CGImageRelease(outputRef);
      free(pixels);
      free(buffer);
  
      UIImageWriteToSavedPhotosAlbum(outputImage, self, @selector(image: didFinishSavingWithError: contextInfo:), nil);
  }
  </code></pre>