macOS版 3DグラフィックスAPIをOpenGLからMetalに移行
フレームワークにMetalを追加してOpenGLを外す。
Targets/General/Frameworks, Libraries, and Embedded Content * MetalKit.framework 追加 * OpenGL.framework 削除
Deployment Targetを10.8から10.12に変更する。 Metalが利用できるのはMac OS X 10.11からであり、Deployment Targetは10.11にする予定だったが、 10.11はテクスチャ画像が上下反転して読み込まれるなど致命的な不具合が確認されたため、10.11の対応は見送る。
Project/Info/Deployment Target macOS Deployment Target: Default -> 10.12 Targets/General/Deployment Info Deployment Target: 10.8 -> 10.12
ビルド設定のリンクにMetalKit.frameworkは自動的に追加されていたが、 ビルドすると"Undefined symbol: _MTLCreateSystemDefaultDevice"というエラーが発生する。 xxxxはMetal関連のAPI名称。これを回避するため、手動で設定を追加。
Targets/Build Phases/Link Binary With Libraries * Metal.framework 追加シェーダのソースをコンパイル対象として手動で追加する。(自動で追加されなかった)
Targets/Build Phases/Compile Sources * OGLShaders.metal 追加
シェーダのデバッグ機能を利用するため設定を追加する。
Projects/Build Settings/Metal Compiler - Build Options Produce Debugging Information Debug : Yes, include source code Release : No
修正対象メソッド scene_PlayStart scene_PlayEnd scene_Rewind scene_ResetViewpoint scene_SetViewpoint scene_GetViewpoint scene_SetEffect scene_OnMouseClick scene_OnMouseWheelWithDeltaX scene_OnGameControllerChanged
ピアノキーボードの画面表示色をVer.1にできるだけ合わせようとしたが、影が黒くなりすぎる問題を解決できなかったため、 2個目のライトを追加して反対方向から照らすことにする。Piano Roll 3Dと同じ。
座標系が右手系から左手系に変わったため、視点パラメータZ,Phiのプラスマイナスが逆になった。
しかしVer.1で保存した視点と、Ver.2で保存した視点の互換性を維持するため、 Ver.2で視点を保存するときと、保存した視点を読み出すときに、パラメータZ,Phiのプラスマイナスを逆にする。
演奏時間経過に応じて、再生面とカメラをX軸方向に移動させる方式を取りやめ、 再生面とカメラは固定してノートボックスとグリッドボックスを移動させる方式に変更する。
演奏時間が長くなると、再生面とリップルのZファイティングが発生するようになったため。
---- [PianoKeyboard] 変更前 WhiteKeyColor=FFFFFFFF BlackKeyColor=FFFFFFFF 変更後 WhiteKeyColor=EEEEEEFF BlackKeyColor=EEEEEEFF
Appleは、2018年のmacOS 10.14 MojaveとiOS 12から、OpenGLを非推奨APIと宣言している。 MIDITrailは初回リリース時点からOpenGLを利用してきたが、macOS版の開発を継続するため、 OpenGLからMetalへの移行を実施する。
本修正を契機として、MIDITrailのメジャーバージョンをVer.1からVer.2に変更する。
MIDITrail Ver.1.3.6のサポート対象OSは、OS X 10.8(Mountain Lion)以降である。 MIDITrail Ver.2.0.0では、サポート対象OSをMetalが利用可能となったOS X 10.11(El Capitan)以降(*1)に変更する予定だった。 しかし10.11では、テクスチャ画像が上下反転して読み込まれる(*2)など致命的な不具合が確認されたため、 macOS 10.12(Sierra)以降をサポート対象OSとする。