ページ 11

GLSLで、計算した値を見る方法

Posted: 2013年8月08日(木) 00:39
by ghffmj
連投すみません。

GLSLで計算した結果を見たいのですが、GLSLにはprintfのようなものがありません。
どうすれば値が見れますか?glReadPixelsで、画像形式として渡すことは可能ですが、それだとfloat値が分かりません。
GPUからCPUに変数を伝送させることが出来ればいいのですが。。。(CPUからGPUへはuniform変数で可能なようですが)
例えば、こんなことがやりたいです。

//vertex shader
vec4 a = (1, 2, 3, 1);
x = glModelViewMatrix * a;
このxをCPU側(メインのプログラム)に送る


デバッガーもありますが、数値計算用に使っているだけでGLもループしていないため、恐らく使用できなさそうです。

Re: GLSLで、計算した値を見る方法

Posted: 2013年8月08日(木) 00:48
by h2so5
glReadPixelsのtype引数にGL_FLOATを指定できるので、それでfloat値を取得できるはずです。

Re: GLSLで、計算した値を見る方法

Posted: 2013年8月08日(木) 01:02
by ghffmj
ありがとうございます。
その場合、fragment shaderでgl_FragColorにfloat値を渡せばよいのでしょうか。
また、値の範囲はどうなのでしょうか。例えば、(0, 0)座標に54.321の値をわたし、メインプログラムでそれを読み取ることはできますか?

Re: GLSLで、計算した値を見る方法

Posted: 2013年8月08日(木) 01:16
by h2so5
gl_FragColorには0.0~1.0の間の数値しか渡すことができません。
54.321を渡したい場合は例えば100で割ってgl_FragColorに0.54321を渡した後、メインプログラムで100倍して値を復元します。

Re: GLSLで、計算した値を見る方法

Posted: 2013年8月08日(木) 02:24
by ghffmj
なるほど、上限値を予め与えておき、それで割ったものをFragmentに渡して、メインの方で同じ上限値をかければよいということですね。確かにそれで出来そうです。

ありがとうございます。