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

提供: MonoBook
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の7版が非表示)
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]]に似ているな。
+
[[HLSL]]と似ているな。ただ「中括弧が2個ワンセット」と[[LISP]]ほどではないがカッコがうぜぇ。
ただ中括弧が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>
 
  
 
== 関連項目 ==
 
== 関連項目 ==

2022年6月8日 (水) 01:32時点における最新版

MSL (Metal Shading Language)とは、Metalで利用するプログラマブルシェーダーを記述するためのプログラミング言語である。

概要[編集 | ソースを編集]

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

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

MetalのMSLは事前コンパイルを採用している。アップルによるとMetalが登場するまで使われていたOpenGLOpenGL ESGLSLでは実行時コンパイルを採用していたが、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」だといったグローバル変数に格納する意味不明な方式より遥かにわかりやすいな。

詳細[編集 | ソースを編集]

関連項目[編集 | ソースを編集]

外部リンク[編集 | ソースを編集]