使用屏幕截图iPhone X中的图像时,GPUImage2返回false

时间:2018-01-26 02:59:43

标签: iphone swift screenshot gpuimage iphone-x

我试图捕捉iPhone X的屏幕并使用GPUImage 2。

let success = sharedImageProcessingContext.context.renderbufferStorage(Int(GL_RENDERBUFFER), from:self.layer as! CAEAGLLayer)
if !success {
    return
}

此代码将返回false并且我的应用程序崩溃了。

我尝试使用iPhone X的屏幕截图将此图像发送到其他iOS设备并使用其他iOS设备的屏幕截图,此代码仍可正常使用。

为什么呢?有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

我遇到了同一行代码的问题,似乎是我的修复helped someone else on a crash issue on iPhoneX

作为monkeypatch我在RenderView.swift文件中更改了以下行(从第62行开始):

sharedImageProcessingContext.context.renderbufferStorage(Int(GL_RENDERBUFFER), from:self.layer as! CAEAGLLayer)

var backingWidth:GLint = 0
var backingHeight:GLint = 0
glGetRenderbufferParameteriv(GLenum(GL_RENDERBUFFER), GLenum(GL_RENDERBUFFER_WIDTH), &backingWidth)
glGetRenderbufferParameteriv(GLenum(GL_RENDERBUFFER), GLenum(GL_RENDERBUFFER_HEIGHT), &backingHeight)

由此:

let group = DispatchGroup()
group.enter()

DispatchQueue.main.async {
    sharedImageProcessingContext.context.renderbufferStorage(Int(GL_RENDERBUFFER), from:self.layer as! CAEAGLLayer)
    group.leave()
}
group.wait()

var backingWidth:GLint = 0
var backingHeight:GLint = 0
glGetRenderbufferParameteriv(GLenum(GL_RENDERBUFFER), GLenum(GL_RENDERBUFFER_WIDTH), &backingWidth)
glGetRenderbufferParameteriv(GLenum(GL_RENDERBUFFER), GLenum(GL_RENDERBUFFER_HEIGHT), &backingHeight)

我猜你最初的问题就是这个电话:

sharedImageProcessingContext.context.renderbufferStorage(Int(GL_RENDERBUFFER), from:self.layer as! CAEAGLLayer)

需要在主线程上完成(当涉及后台线程修改UI时,iphoneX可能具有更严格的运行时)。简单地在主线程上调用它是不够的,因为过度值也需要是最新的(这就是为什么我等到它结束继续)。 在我看来,暂停的持续时间非常短暂,可以忽略不计。

编辑:为了将来的帮助,告诉我们您的代码行来自哪个文件会很高兴。一些错误日志也会有所帮助。