「MSL (Metal Shading Language)」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) (→最小限) |
Administrator (トーク | 投稿記録) (→最小限) |
||
10行目: | 10行目: | ||
== 最小限 == | == 最小限 == | ||
<source> | <source> | ||
− | fragment half4 frag(VertexOut input [[stage_in]], constant Uniforms &uniforms [[buufer(0)]]) { | + | fragment half4 frag(VertexOut input [[stage_in]], constant Uniforms &uniforms [[buufer(0)]]) |
+ | { | ||
return half4(1.0); | return half4(1.0); | ||
} | } |
2021年12月8日 (水) 05:32時点における版
MSL (Metal Shading Language)とは、Metalで利用するプログラマブルシェーダーを記述するためのプログラミング言語である。
概要
C++に似ているが完全に別言語である。
ソースコードの拡張子は「.metal」であり、それをビルドしたバイナリの拡張子は「.metallib」となっている。
MetalのMSLは事前コンパイルを採用している。アップルによるとMetalが登場するまで使われていたOpenGLやOpenGL ESのGLSLでは実行時コンパイルを採用していたが、iPhoneのような環境で実行時コンパイルはあまりにも重すぎるため事前コンパイル方式を採用したとしている。
最小限
fragment half4 frag(VertexOut input [[stage_in]], constant Uniforms &uniforms [[buufer(0)]])
{
return half4(1.0);
}
「このメソッドは何シェーダーなのか」はメソッドの頭に「vertex」「fragment」「kernel」などと付けて宣言する。GLSLの何シェーダーなのか意味不明すぎる「void main()」より圧倒的にわかりやすいな。
引数名の後ろには「どこから来た」「なにに使う」かなどを指定するセマンティクスが付く。 HLSLと似ているな。ただ「中括弧が2個ワンセット」とLISPほどではないがカッコがうぜぇ。
定数バッファ(ユニフォーム変数)は引数として参照渡しされている。 ここはちょっと独特だな。
戻り値はHLSLと同じく「return」だ。 GLSLの意味不明な「gl_FragColor」だ「gl_FragData」だより遥かにわかりやすいな。
Xamarinからの利用
「メインバンドル(アプリに含まれるリソース)に含まれるmetallib」はCreateDefaultLibraryメソッドで手軽に読み込める。とくに難しく考える必要性はない。
var library = _device.CreateDefaultLibrary();