2012-06-01 29 views
0

当试图将opengl视图快照作为UIImage进行多采样时,图像颜色是不同的。OpenGL ES快照为iOS中的多色采样提供奇数颜色

当多重采样关闭时,它是正确的。 这是我正在采取快照:

- (UIImage*)snapshot 
{ 

    GLint backingWidth, backingHeight; 

    backingWidth = framebufferWidth; 
    backingHeight = framebufferHeight; 

    NSInteger myDataLength = backingWidth * backingHeight * 4; 

    GLubyte *buffer = (GLubyte *) malloc(myDataLength); 
    glReadPixels(0, 0, backingWidth, backingHeight, GL_RGBA, GL_UNSIGNED_BYTE, buffer); 

    // gl renders "upside down" so swap top to bottom into new array. 
    GLubyte *buffer2 = (GLubyte *) malloc(myDataLength); 

    for(int y = 0; y < backingHeight; y++) { 
     for(int x = 0; x < backingWidth * 4; x++) { 
      buffer2[y*4*backingWidth + x] = buffer[(backingHeight - y -1) * backingWidth * 4 + x]; 
     } 
    } 
    // make data provider with data. 
    CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer2, myDataLength, myProviderReleaseData); 

    // prep the ingredients 
    int bitsPerComponent = 8; 
    int bitsPerPixel = 32; 
    int bytesPerRow = 4 * backingWidth; 
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); 
    CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast ; 
    CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; 

    // make the cgimage 
    CGImageRef imageRef = CGImageCreate(backingWidth, backingHeight, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent); 

    // then make the uiimage from that 
    UIImage *image1 = [UIImage imageWithCGImage:imageRef]; 

    CGImageRelease(imageRef); 
    CGColorSpaceRelease(colorSpaceRef); 
    CGDataProviderRelease(provider); 
    free(buffer); 

    return image1; 
} 

这里是采取快照结果:

opengl view

snapshot of the same view

第一个是OpenGL的看法,我绘画和第二张图片是我获得上述代码的图片的快照。

我没有使用GLKit框架。想知道为什么多重采样混淆了快照。

回答

1

检查您是否调用[EAGLContext:presentRenderBuffer]以OpenGL的视图的快照

+0

感谢之前的方法,它的工作! – darshansonde