首页 > 代码库 > iOS开发- OpenGL ES屏幕截图

iOS开发- OpenGL ES屏幕截图

之前写过一个常规的屏幕截图:http://blog.csdn.net/hitwhylz/article/details/17189351

但是发现这个办法对于OpenGL 无用。  获取到的数据为空。

所以这里介绍下OpenGL ES屏幕截图。


1.初始化。


CAEAGLLayer *eaglLayer = (CAEAGLLayer *) self.layer;  
eaglLayer.drawableProperties = @{  
    kEAGLDrawablePropertyRetainedBacking: [NSNumber numberWithBool:YES],  
    kEAGLDrawablePropertyColorFormat: kEAGLColorFormatRGBA8  
}; 


2.声明方法。

- (UIImage*)snapshot:(UIView*)eaglview
{
    GLint backingWidth, backingHeight;
    
    // Bind the color renderbuffer used to render the OpenGL ES view
    
    // If your application only creates a single color renderbuffer which is already bound at this point,
    
    // this call is redundant, but it is needed if you‘re dealing with multiple renderbuffers.
    
    // Note, replace "viewRenderbuffer" with the actual name of the renderbuffer object defined in your class.
    
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
    
    // Get the size of the backing CAEAGLLayer
    
    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);

    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
    
    NSInteger x = 0, y = 0, width = backingWidth, height = backingHeight;
    
    NSInteger dataLength = width * height * 4;
    
    GLubyte *data = http://www.mamicode.com/(GLubyte*)malloc(dataLength * sizeof(GLubyte));>



3.使用

调用上述的方法即可。

- (UIImage*)snapshot:(UIView*)eaglview