「MSL (Metal Shading Language)」を編集中
ナビゲーションに移動
検索に移動
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
1行目: | 1行目: | ||
− | ''' | + | '''Metal Shading Language'''とは、[[Metal]]で利用する[[プログラマブルシェーダー]]を記述するための[[プログラミング言語]]である。 |
== 概要 == | == 概要 == | ||
− | + | [[C++]]に似ているが完全に別言語である。 | |
[[ソースコード]]の拡張子は「.metal」であり、それを[[ビルド]]した[[バイナリ]]の拡張子は「.metallib」となっている。 | [[ソースコード]]の拡張子は「.metal」であり、それを[[ビルド]]した[[バイナリ]]の拡張子は「.metallib」となっている。 | ||
9行目: | 9行目: | ||
== 最小限 == | == 最小限 == | ||
− | <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); | ||
} | } | ||
18行目: | 17行目: | ||
「このメソッドは何シェーダーなのか」はメソッドの頭に「vertex」「fragment」「kernel」などと付けて宣言する。[[GLSL]]の何シェーダーなのか意味不明すぎる「void main()」より圧倒的にわかりやすいな。 | 「このメソッドは何シェーダーなのか」はメソッドの頭に「vertex」「fragment」「kernel」などと付けて宣言する。[[GLSL]]の何シェーダーなのか意味不明すぎる「void main()」より圧倒的にわかりやすいな。 | ||
− | + | 引数名の後ろには「どこから来た」「なにに使う」かなどを指定するセマンティクスが付く。 | |
− | [[HLSL]] | + | [[HLSL]]と似ているな。ただ「中括弧が2個ワンセット」とか[[LISP]]ほどではないがカッコがうぜぇ。 |
− | [[定数バッファ]]([[ユニフォーム変数]] | + | [[定数バッファ]]([[ユニフォーム変数]])は引数として参照渡しされている。 |
ここはちょっと独特だな。 | ここはちょっと独特だな。 | ||
[[戻り値]]は[[HLSL]]と同じく「return」だ。 | [[戻り値]]は[[HLSL]]と同じく「return」だ。 | ||
− | [[GLSL]] | + | [[GLSL]]の意味不明な「gl_FragColor」だ「gl_FragData」だより遥かにわかりやすいな。 |
− | == | + | == Xamarinからの利用 == |
− | + | 「メインバンドル(アプリに含まれるリソース)に含まれるmetallib」はCreateDefaultLibraryメソッドで手軽に読み込める。とくに難しく考える必要性はない。 | |
− | + | <source> | |
+ | var library = _device.CreateDefaultLibrary(); | ||
+ | </source> | ||
== 関連項目 == | == 関連項目 == |