【问题标题】:GLKViewController (GLKView) glReadPixels return black pixels after iO6GLKViewController (GLKView) glReadPixels 在 iO6 之后返回黑色像素
【发布时间】:2012-09-24 22:16:19
【问题描述】:

我将 GLKViewController 与 GLKView 一起使用,在 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

接受所有帮助,谢谢,

【问题讨论】:

    标签: iphone ios graphics eaglview eaglcontext


    【解决方案1】:

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

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

    【讨论】:

    • 在 openGL 上的进程着色器之后,我正在使用设备相机的 PixelBuffer 录制电影,我需要知道如何在 iOS6 上重新启用 openGL 的后台缓冲区(在 iOS5 上完美运行......)
    • 对我来说快照方法完全不可靠
    猜你喜欢
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多