「MSL (Metal Shading Language)」の版間の差分

編集の要約なし
 
(同じ利用者による、間の6版が非表示)
1行目: 1行目:
'''Metal Shading Language'''とは、[[Metal]]で利用する[[プログラマブルシェーダー]]を記述するための[[プログラミング言語]]である。
'''MSL''' (Metal Shading Language)とは、[[Metal]]で利用する[[プログラマブルシェーダー]]を記述するための[[プログラミング言語]]である。


== 概要 ==
== 概要 ==
[[C++]]に似ているが完全に別言語である。
アップルは「[[C++14]]がベースだ」と主張しているが完全に別言語である。


[[ソースコード]]の拡張子は「.metal」であり、それを[[ビルド]]した[[バイナリ]]の拡張子は「.metallib」となっている。
[[ソースコード]]の拡張子は「.metal」であり、それを[[ビルド]]した[[バイナリ]]の拡張子は「.metallib」となっている。
9行目: 9行目:


== 最小限 ==
== 最小限 ==
<source>
<source lang="c">
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);
}
}
17行目: 18行目:
「このメソッドは何シェーダーなのか」はメソッドの頭に「vertex」「fragment」「kernel」などと付けて宣言する。[[GLSL]]の何シェーダーなのか意味不明すぎる「void main()」より圧倒的にわかりやすいな。
「このメソッドは何シェーダーなのか」はメソッドの頭に「vertex」「fragment」「kernel」などと付けて宣言する。[[GLSL]]の何シェーダーなのか意味不明すぎる「void main()」より圧倒的にわかりやすいな。


引数名の後ろには「どこから来た」「なにに使う」かなどを指定するセマンティクスが付く。
[[引数]]名の後ろには「どこから来た」「なにに使う」かなどを指定するセマンティクスが付く。
[[HLSL]]と似ているな。ただ「中括弧が2個ワンセット」とか[[LISP]]ほどではないがカッコがうぜぇ。
[[HLSL]]と似ているな。ただ「中括弧が2個ワンセット」と[[LISP]]ほどではないがカッコがうぜぇ。


[[定数バッファ]]([[ユニフォーム変数]])は引数として参照渡しされている。
[[定数バッファ]]([[ユニフォーム変数]])は[[引数]]として[[参照渡し]]されている。
ここはちょっと独特だな。
ここはちょっと独特だな。


[[戻り値]]は[[HLSL]]と同じく「return」だ。
[[戻り値]]は[[HLSL]]と同じく「return」だ。
[[GLSL]]の意味不明な「gl_FragColor」だ「gl_FragData」だより遥かにわかりやすいな。
[[GLSL]]の「gl_FragColor」だ「gl_FragData」だといった[[グローバル変数]]に格納する意味不明な方式より遥かにわかりやすいな。


== Xamarinからの利用 ==
== 詳細 ==
「メインバンドル(アプリに含まれるリソース)に含まれるmetallib」はCreateDefaultLibraryメソッドで手軽に読み込める。とくに難しく考える必要性はない。
* [[MetalとC++の違い]]
<source>
* [[Xamarin.iOSでMetalを利用する]]
var library = _device.CreateDefaultLibrary();
</source>


== 関連項目 ==
== 関連項目 ==