MacOS, iOS などの新しいグラフィック API といえば Metal だが、Mtal のシェーダーを記述する言語は、Metal Shading Language (MSL)という。
現在のバージョンは 3.0 で仕様も公開されている。
C++14 ベースというのは聞いていたので、クラスやメソッドなどを C/C++ や Objective-C あたりで書いておけば、シェーダー(具体的には .metal ファイル)から特別な手続きなしに呼び出せるのだろうと安直に思っていたのだが、どうやら違うようだ。
これはなかなか困った事態だ。
というのは、ある種の機能はシェーダーからも普通のコードからも使いたい、ということがよくある。
大抵は、こういった共通に使うような機能は C/C++ などで書いておけば、それほど困った事態にはならないのだが、これが必ずしも成立しないということを意味している。
StackOverFlow にもこの手のお困り質問が見られるようになった。
(追記)公式にも .metal で複雑な操作(例えば複数の .metal を使いたいような場合)をするときには、一旦、シンボルファイルを作って… という記事が上がっていた。
いや、しかし、これ本当にさせるつもりあるの???
C++ に似ているが C++ 標準ライブラリは使えない
仕様書の最初の方にも
Do not use the C++ standard library in Metal code
と早々と警告を発している。
標準ライブラリの他にもラムダ式も使えない。
参考:
これ
海外でもやはり。。。
(続く)