T.TAO
ブログへ戻る
/2 min read/Graphics Engine

Metal #0 Swift 復習

#ComputerGraphics#GraphicsEngine#Metal
Metal #0 Swift 復習

Metal は Objective-C と C++ で書けるが、多くの Metal ドキュメントやチュートリアルは Swift で書かれている。本ノートでは Swift の簡単な復習を行う。

変数宣言

値型の宣言

Swift では以下の構文で変数を宣言する。

Swift// 変数
var str = "Hello World"
var myVariable = 123 
var myInt : Int = 5 // 明示的な型宣言

// 定数
let constantVariable = 123
let myExplicitDouble : Double = 5.0

// 配列
let intArray = [1,2,3,4,5]
let expIntArray : [Int] = [1,2,3,4,5]

// タプル
let fileNotFound = (404, "File Not Found")
let serverError = (code: 500, message: "Internal Server Error")
// タプルは各値のインデックスを提供するので、serverError.message で2番目の要素を取得可能

// 辞書
var crew = ["A": "Tony", "B":"Aaron", "C":"Steve"]
print(crew["A"]) // "Tony"
crew["D"] = "Eric" // ("D", "Eric") を辞書に追加
crew.removeValue(forKey:"D") // ("D", "Eric") を削除

var と let の違いは変数の可変性。let で宣言した変数は不変で、後で変更するとコンパイラがエラーを出す。

Swift 標準ライブラリでは、Array、Dictionary、Set などのコレクション型は値型として設計されている。変数や定数に代入したり、関数に渡すときは実際にはコピーを操作する。ただし Swift は Copy-on-Write (COW) 戦略で最適化しており、実際のコピーはデータを変更する必要がある時のみ発生する。

関数

宣言

Swift// 引数なしの手続き
func HelloWorld() {
	print("Hello World")
}

// 引数なし、戻り値あり
func MyNumber() -> Int {
	return 123
}

// 引数あり
func Plus(firstVal: Int, secondVal: Int) -> Int {
	return firstVal + secondVal
}

このシリーズの記事

Metal →
  1. 01Metal #0 Swift 復習
  2. 02Metal #1 初期化
  3. 03Metal #2 レンダリングパイプライン
  4. 04Metal #3 頂点関数
  5. 05Metal #4 フラグメント関数
  6. 06Metal #5 テクスチャ
  7. 07Metal #6 カメラと操作
  8. 08Metal #7 ライティング
  9. 09Metal #8 マテリアル
  10. 10Metal #9 レンダーパス
  11. 11Metal #10 シャドウ
  12. 12Metal #11 遅延レンダリング
  13. 13Metal #12 パーティクルシステム
  14. 14Metal #13 テッセレーション
  15. 15Metal #14 ポストプロセス
  16. 16Metal #15 反射と屈折
  17. 17Metal #16 アニメーション
  18. 18Metal #17 レイトレーシング(一)レンダリングアルゴリズム
  19. 19Metal #18 レイトレーシング(二)影とライティング
  20. 20Metal #19 レイトレーシング(三)性能最適化
  21. 21Metal #21 [付録] Compute Shader
  22. 22Metal #22 [付録] SwiftUI における Metal