GLKViewController(GLKView)glReadPixels在iO6之后返回黑色像素

时间:2012-09-24 22:16:20

标签: iphone ios graphics eaglview eaglcontext

我正在使用带有GLKView的GLKViewController,在ios5上工作正常,在io6更新glReadPixels停止工作后,只返回黑色像素。

我读了一些关于preserveBackBuffer的内容,但是还是成功了

我的GLKView设置:

_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

if (!_context) {
    DLog(@"Failed to create ES context");
}

GLKView *view = (GLKView *)self.view;
view.context = _context;

解决方案的可能途径? (我在这里尝试,但仍然不起作用)

CAEAGLLayer * eaglLayer = (CAEAGLLayer*) view.layer;
eaglLayer.drawableProperties = @{kEAGLDrawablePropertyRetainedBacking : @(YES)};

我正在使用glReadPixels来在着色器处理后记录相机

- (void)captureOutput:(AVCaptureOutput *)captureOutput 
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
   fromConnection:(AVCaptureConnection *)connection

接受所有帮助,谢谢,

1 个答案:

答案 0 :(得分:0)

根据文档,如果需要读取像素而不是glReadPixels,则应使用GLKView的“快照”方法。来自关于'快照'的文档:

  

讨论:   调用此方法时,视图将设置绘图环境并调用绘图方法。但是,它们不是在屏幕上显示视图的内容,而是作为图像返回到您的应用程序。只要您的应用程序明确需要视图的内容,就应该调用此方法;永远不要尝试使用OpenGL ES函数直接读取底层帧缓冲区的内容。