CIFilter の結果/出力イメージである CIImage があります。次に、GLKTextureLoader を使用してその画像のテクスチャを作成します。私はそれを達成するために CGImageRef を必要とする次の関数を使用しています。
[GLKTextureLoader textureWithCGImage: options: error:];
問題は、CIImage を GLKTextureLoader で使用できる CGImageRef に変換する最良の方法は何ですか?
次の方法を試しましたが、失敗しました。
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef ref = [context createCGImage:fullScreenCI fromRect:fullScreenCI.extent];
self.info = [GLKTextureLoader textureWithCGImage:ref options:nil error:&error];
fullscreenCIは CIFilter の outputImage です。
上記の方法では、次のエラーが発生します。
GLK テクスチャの作成中にエラーが発生しました: エラー ドメイン=GLKTextureLoaderErrorDomain コード=12 「操作を完了できませんでした。(GLKTextureLoaderErrorDomain エラー 12.)」 UserInfo=0x1438a880 {GLKTextureLoaderErrorKey=画像のデコードに失敗しました}
色空間の問題が原因である可能性があることがわかり、次の方法を試しました。
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef ref = [context createCGImage:fullScreenCI fromRect:fullScreenCI.extent];
fullscreen = [UIImage imageWithData:UIImagePNGRepresentation([UIImage imageWithCGImage:ref])];
self.info = [GLKTextureLoader textureWithCGImage:fullscreen.CGImage options:nil error:&error];
上記の方法で問題なく動作するようになりました!しかし、UIImagePNGRepresentation を使用せずに CIImage を CGImageRef に変換するより良い方法があるかどうかを知りたいです。