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

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
(ページの作成:「'''Metal Shading Language'''とは、Metalで利用するプログラマブルシェーダーを記述するためのプログラミング言語である。…」)
 
9行目: 9行目:
  
 
== 最小限 ==
 
== 最小限 ==
そのうちかく
 
 
<source>
 
<source>
 +
fragment half4 frag(VertexOut input [[stage_in]], constant Uniforms &uniforms [[buufer(0)]]) {
 +
    return half4(1.0);
 +
}
 +
</source>
  
</source>
+
何シェーダーなのかは関数の頭に「fragment」や「kernel」などと付けて宣言する。
 +
[[GLSL]]の何シェーダーなのか意味不明すぎる「void main()」よりわかりやすいな。
 +
 
 +
引数名の後ろには「どこから来た」「なにに使う」かなどを指定するセマンティクスが付く。
 +
[[HLSL]]に似ているな。
 +
ただ中括弧が2個ワンセットとか[[LISP]]ほどではないがカッコがうぜぇ。
 +
 
 +
[[定数バッファ]]([[ユニフォーム変数]])は引数として参照渡しされている。
 +
ここはちょっと独特だな。
 +
 
 +
[[戻り値]]は[[HLSL]]と同じく「return」だ。
 +
[[GLSL]]の意味不明な「gl_FragColor」だ「gl_FragData」だより遥かにわかりやすいな。
  
 
== Xamarinからの利用 ==
 
== Xamarinからの利用 ==

2020年6月19日 (金) 07:26時点における版

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

概要

C++に似ているが完全に別言語である。

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

MetalのMSLは事前コンパイルを採用している。アップルによるとMetalが登場するまで使われていたOpenGLOpenGL ESGLSLでは実行時コンパイルを採用していたが、iPhoneのような環境で実行時コンパイルはあまりにも重すぎるため事前コンパイル方式を採用したとしている。

最小限

fragment half4 frag(VertexOut input [[stage_in]], constant Uniforms &uniforms [[buufer(0)]]) {
    return half4(1.0);
}

何シェーダーなのかは関数の頭に「fragment」や「kernel」などと付けて宣言する。 GLSLの何シェーダーなのか意味不明すぎる「void main()」よりわかりやすいな。

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

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

戻り値HLSLと同じく「return」だ。 GLSLの意味不明な「gl_FragColor」だ「gl_FragData」だより遥かにわかりやすいな。

Xamarinからの利用

「メインバンドル(アプリに含まれるリソース)に含まれるmetallib」はCreateDefaultLibraryメソッドで手軽に読み込める。とくに難しく考える必要性はない。

var library = _device.CreateDefaultLibrary();

関連項目

外部リンク