我 try catch 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 设备的屏幕截图,此代码仍然有效。
为什么?有人能解释一下吗?最佳答案
我在同一行代码中遇到了问题,看来我的修复helped someone else on a crash issue on iPhoneX
作为一个猴子补丁,我更改了 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)
需要在主线程上完成(也许 iphoneX 在后台线程修改 UI 时具有更多限制性的运行时)。简单地在主线程上调用它是不够的,因为超过的值也需要是最新的(这就是为什么我等到它结束才继续)。 在我看来,暂停的持续时间非常短,可以忽略不计。
编辑:为了将来的帮助,最好告诉我们您的代码行来自哪个文件。一些错误日志也会有帮助。
关于iphone - 使用 iPhone X 屏幕截图中的图像时 GPUImage2 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48455199/