39

C では、次のようなコードをデバッグできます。

fprintf(stderr, "blah: %f", some_var);

GLSLで... VertexまたはFragmentシェーダーで値をダンプする方法はありますか? 遅いかどうかは気にしません。値をダンプしたいだけです。理想的には、次のようなセットアップが必要です。

  • 通常の状態 = GLSL シェーダーを通常どおり実行する
  • キー「d」を押す = 次のフレームがULTRA低速モードで生成され、頂点/フラグメント シェーダーの「printfs」が実行され、ダンプされます。

これは実現可能ですか?(パフォーマンスは気にしません。これを 1 つのフレームで実行したいだけです)。

ありがとう!

4

4 に答える 4

25

残念ながら直接はできません。ただし、最終的に多くのことを使用することになる解決策の 1 つ (ただし、GLSL 開発者の間ではかなり一般的であると確信しています) は、意図した最終結果の代わりに、値を色として「印刷」することです。

もちろん、これには多くの制限があります。1 つには、値が範囲内にマップされていることを確認する必要があります(0,1.0)。などの機能はmodfractこれらの場合に役立ちます。しかし、一般的に、これは GLSL で「printf」に相当するものと見なされます。

于 2011-06-23T13:25:06.607 に答える
21

値を出力する代わりに、GLSL デバッガーを試すことを考えましたか?

たとえば、glslDevilを使用すると、シェーダーの実行をステップ実行し、各ステップで変数を調べることができます。

于 2010-08-06T02:20:01.167 に答える
-3

チェックしたい変数の値をユニフォームにコピーして確認し、そのユニフォームを次のコマンドで取得できます。glGetUniformfv

于 2013-01-14T14:52:04.170 に答える