glBlendColorとglBlendFuncを使用してGLKViewで2つの画像を合成する際に問題があります。設定した色が結果の出力に影響を与えないため、実際には色を設定していないようです。私はglBlendColorを使用して、不透明度が1のフレームバッファに既にある画像の上にあるさまざまな不透明度で画像を合成しようとしています。glBlendColorがiOSで動作しない
どこが間違っているのか誰かに教えてもらえますか?私はXcode 7.3でiOS 9.3用に書いています。私のコードは次のとおりです。これは、image1をimage2に置き換えます。透明度はありませんが、image1の上にimage2を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()
私は答えを持っていませんが、誰かがこれを見て助けてくれればと思います: 'drawImages'の後にいくつかの' glGets'を投げてみたところ、有効とブレンドがまだ設定されていることを確認しました。私はまた、ブレンド機能を 'GL_ONE'、' GL_ONE'に切り替えて、追加の描画を確認しました。ですから、私は 'CIContext'が何かを修正しているとは思わないし、すべてのフラグメントが確実に出力ステージに到達しています。 – Tommy
@トミー、コメントありがとう。ええ、私はCoreImageを使って不透明度を上げて成功しました。そして、 'glBlendFunc'は既に透明な第2の画像を最初のものに置きますが、CoreImageをスキップして、' glBlendColor'を使って不透明度を作ると、不透明度調整なし。これは、何らかの理由でCoreImageコンテキストが 'glBlendColor'でうまく動かないと思います。 –