トップページ > 過去ログ > 記事閲覧
fxファイル(HLSL)内でのメンバ変数名について
名前:いっち 日時: 2011/07/10 13:22

おそらく、DXライブラリに直接関わらない質問ですがご容赦下さい。 おかげさまで、なんとなくですがピクセルシェーダを利用するプログラムを作成することが出来るようになりました。 ただ、fxファイル(HLSL)内の記述について分からない点があります。 たとえば、サンプルとして配布されている "SamplePS.fx" では、 以下のように、"float4"型で変数"texc"を定義していますが、 0019> float4 texc ; その texc のメンバに対して、以下のように"r"・"g"・"b"・"a"という名前でアクセスしています。 0023> psout.Output.r = texc.b ; 私がわからないのは、「この各メンバの名前がどういったルールで決まるのか」ということです。 最初は型名とセマンティクスによって決まるのかと思いましたが、どうやら違うようでした。 ためしに、"r"を"x"に変えてコンパイルすると動作しましが、"q"に変えるとコンパイルエラーになりました。 また"float4"を"float2"に変えると、"b"と"a"がコンパイルエラーとなりました。 (tex2D の戻り値が float4 でなくても通るというのも気になりますが・・・) なんとなく組むには問題ないのですが、非常に気持ち悪いです。 このへんの言語仕様をご存知の方がいらっしゃいましたら、ご教授下さい。よろしくお願いします。

Page: 1 |

Re: fxファイル(HLSL)内でのメンバ変数名について ( No.1 )
名前:管理人 日時:2011/07/10 20:19

HLSLの float4 や float2 のメンバの名前は以下のように定義されていると考えてください struct float2 { union { float x, r; }; union { float y, g; }; }; struct float4 { union { float x, r; }; union { float y, g; }; union { float z, b; }; union { float w, a; }; }; セマンティクスは関係ありません
Re: fxファイル(HLSL)内でのメンバ変数名について ( No.2 )
名前:いっち 日時:2011/07/10 22:00

回答ありがとうございます。 > HLSLの float4 や float2 のメンバの名前は以下のように定義されていると考えてください なんとなくそんな感じだろうなぁとは思っていたのですが、 すっきりしないのでしつこく調べていたら、普通にmsdnのリファレンスに資料がありました・・・。 どなたかのお役に立つかもしれないのでリンクを張っておきます。 HLSL のリファレンス > 言語構文 (DirectX HLSL) > 変数(DirectX HLSL) >データ型(DirectX HLSL) > 成分ごとの演算 (DirectX HLSL) > h t t p ://msdn.microsoft.com/ja-jp/library/ee418342(v=vs.85).aspx わざわざお手数おかけして申し訳ありませんでした。

Page: 1 |