2016年10月1日土曜日

Swift3.0で長さの決まった配列を宣言する方法

久しぶりにXcodeをアップデートしてSwiftを触ってみると、だいぶ以前と感触が違っていて驚き。

ガンガンアップデートされてより良い言語になっているのであろうけれども、ちょっとブランクがある好きに全く違う言語になってしまうのは少々厳しいところ。とはいえ久々にiPhoneでGPGPU的なプログラムを書きたい気分なので、Swiftを使わない手はないでしょう。

ということで今詰まった固定長の配列の宣言方法について。

var fixedLengthArray = [Int](repeating: 0, count: 100)

repeatingを変えると初期の数値が変更でき、countで長さを決定。

何のためにこれをしているかというと、OpenGL ESでテクスチャを読み込むために、UIImageから生のピクセルデータを取り出す必要があったから。



let width = Int(image.size.width)
let height = Int(image.size.height)
var pixelData = [GLubyte](repeating: 0, count: width * height * 4)
let colorSpace = image.cgImage?.colorSpace
let context = CGContext.init(data: &pixelData, width: width, height: height, bitsPerComponent: 8, bytesPerRow: width * 4, space: colorSpace!, bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue)
context?.draw(in: CGRect(x: 0, y: 0, width: CGFloat(width), height: CGFloat(height)), image: image.cgImage!)
これでpixelDataの中に生情報が格納されたはず。 このデータをテクスチャにアップロードして、テクスチャをバインドしてレンダリングすれば絵が出るぞ!