我在使用glBlendColor和glBlendFunc在GLKView中合成两个图像时遇到问题-它似乎没有实际设置颜色,因为我设置的任何颜色对结果输出都没有影响。我正在尝试使用glBlendColor在帧缓冲区中已经存在的图像(不透明度为1)上合成不同不透明度的图像。
有人能告诉我哪里出错了吗?我是为iOS9.3写的,在Xcode7.3中。这里是我的代码:这将image1替换为image2,没有透明度,但是它应该将image2放在image1的顶部,不透明度为0.5。
let glContext = EAGLContext(API: .OpenGLES3)
let glView = GLKView(frame: view.frame, context: glContext)
let ciContext = CIContext(EAGLContext: glContext)
view.addSubview(glView)
let uiImage1 = UIImage(named: "1.jpg")!
let image1 = CIImage(image: uiImage1)!
let uiImage2 = UIImage(named: "2.jpg")!
let image2 = CIImage(image: uiImage2)!
glView.bindDrawable()
ciContext.drawImage(image1, inRect: image1.extent, fromRect: image1.extent)
glEnable(GLenum(GL_BLEND))
glBlendFunc(GLenum(GL_CONSTANT_ALPHA), GLenum(GL_ONE_MINUS_CONSTANT_ALPHA))
glBlendColor(0, 0, 0, 0.5)
ciContext.drawImage(image2, inRect: image2.extent, fromRect: image2.extent)
glView.display()
最佳答案
如果它有助于找到答案,IOS支持EXT_shader_framebuffer_fetch,它提供了一种机制,使片段着色器可以读取现有的帧缓冲区数据作为输入(它可以用来实现组合操作,这将是不方便或不可能的,与固定函数混合”;苹果explicitly advertises it是一个“获取帧缓冲区数据用于可编程混合”的机会。
我不清楚观察到的行为会产生什么样的结果-加法混合模式是受尊重的,但乘法与混合颜色不是-但这可能有助于解释为什么期望可能会被挫败。
关于ios - glBlendColor无法在iOS上使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36148520/