我试图捕捉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设备的屏幕截图,此代码仍可正常使用。
为什么呢?有人可以解释一下吗?
答案 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可能具有更严格的运行时)。简单地在主线程上调用它是不够的,因为过度值也需要是最新的(这就是为什么我等到它结束继续)。 在我看来,暂停的持续时间非常短暂,可以忽略不计。
编辑:为了将来的帮助,告诉我们您的代码行来自哪个文件会很高兴。一些错误日志也会有所帮助。