GLKTextureLoader.textureでエラーが発生する
GLKTextureLoader.textureでnullが帰って来てエラーになります。
どのようにして取得すれば良いでしょうか?
エラーメッセージ
Error Domain=GLKTextureLoaderErrorDomain Code=12 "(null)" UserInfo={GLKTextureLoaderErrorKey=Image decoding failed}
コード
import Cocoa
import CoreImage
import GLKit
func toCGImage(image: NSImage) -> CGImage?{
var imageRect:CGRect = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)
let aCGImage = image.cgImage(forProposedRect: &imageRect, context: nil, hints: nil)
return aCGImage
}
let simpleattr: [NSOpenGLPixelFormatAttribute] = [
NSOpenGLPixelFormatAttribute(NSOpenGLPFADoubleBuffer),
NSOpenGLPixelFormatAttribute(NSOpenGLPFAAccelerated),
NSOpenGLPixelFormatAttribute(0)
]
let pf = NSOpenGLPixelFormat(attributes: simpleattr)
let image1 = NSImage(byReferencingFile: "/Users/xxx/Pictures/スクリーンショット1.png")!
let image2 = NSImage(byReferencingFile: "/Users/xxx/Pictures/スクリーンショット2.png")!
let overlayImage:CIImage = CIImage(cgImage: toCGImage(image: image1)!)
let backgroundImage:CIImage = CIImage(cgImage: toCGImage(image: image2)!)
let alpha:CGFloat = 0.8
let rgba:[CGFloat] = [0.0, 0.0, 0.0, alpha]
let colorMatrix:CIFilter = CIFilter(name: "CIColorMatrix")!
colorMatrix.setDefaults()
colorMatrix.setValue(overlayImage, forKey: kCIInputImageKey)
let vector = CIVector(values: rgba, count: 4)
colorMatrix.setValue(vector, forKey: "inputAVector")
let composite:CIFilter = CIFilter(name: "CISourceOverCompositing")!
composite.setDefaults()
composite.setValue(colorMatrix.outputImage, forKey: kCIInputImageKey)
composite.setValue(backgroundImage, forKey: kCIInputBackgroundImageKey)
let outputImage:CIImage = composite.outputImage!
let context:CIContext = CIContext.init(options: nil)
let pixelData = context.createCGImage(outputImage, from: outputImage.extent)!
let glContext:NSOpenGLContext = NSOpenGLContext(format: pf!, share: nil)!
glContext.makeCurrentContext()
var texture:GLKTextureInfo
do {
//失敗する。
texture = try GLKTextureLoader.texture(with: pixelData, options: nil)
} catch {
//ここに来る。
print(error)
exit(0)
}