シェーダ内関数への参照渡し

関数から複数の戻り値をとりたい
そんな時は参照渡し!でもどうやるんだ?
調べたところ
引数にinout或いはoutと付けると呼び出しもとの変数を参照渡しできる
01: void test(inout float x,inout float y)
02: {
03:   x=1.0;
04:   y=x;
05: }
06: void main(void)
07: {
08:   float  a=0.0;
09:   float  b;
10:   test(a,b);
11: }
なーんも意味の無い関数ですが
9行目まではa=0でbは未定です
10行目で関数test()にa,bが参照渡しされて、関数が実行されます
xにaを、yにbを参照渡ししてtest()を動かしているので3行目ではaに1.0が代入され
4行目ではbにaが代入されます
よって、main関数終了時である11行目時点ではa=1.0、b=1.0になっているはずです

更に調べたところ、in,out,inoutが指定できて、inは入力用の指定、outは出力用、inoutは入出力に使える指定となるようです
C言語で言うならinがconstでout,inoutが参照渡しなのかな?
まだ試していませんが、おそらくinで入力された値は関数内で変更できず、out指定の引数は数値を参照渡しできても読み取りが出来ない
inoutは参照渡しで、数値を参照渡しできるけど呼び出しもとで設定しておいた数値を読み取ることも出来る
といった使い方なのかな?

追記2014/10/29
よく分からないけどWebGLのエライ人によるとin,out,inoutといった修飾子は必ずつけるべきであるそうです
つけなくても大体動くし、ほとんどの場合inなんだけどなあ
シェーダコンパイルの関係でつけたほうが有利なのかな?

  • 最終更新:2014-10-29 23:52:59

このWIKIを編集するにはパスワード入力が必要です

認証パスワード