2017-10-11 20 views
0

GLSLシェーダをデバッグします。 私が必要とするのは、文字列情報を送信することです。 私はFBOを試しましたが、これはクリーンな方法ではありませんGLSLシェーダからログを送信

ログをメインプログラムに送信する方法はありますか?

+0

私の[GLSL debug prints](https://stackoverflow.com/a/44797902/2521214)を参照してください。テキスト出力を含む領域の各フラグメントに対して同じことを印刷するだけで十分です。それは場合によっては難しく、不可能でさえあります。ここでの例:[GLSL Ray tracer](https://stackoverflow.com/a/45140313/2521214) – Spektre

+1

https://github.com/msqrt/shader-printf – genpfault

+0

[GLSLシェーダをデバッグするにはどうすればいいですか?] (https://stackoverflow.com/questions/2508818/how-to-debug-a-glsl-shader) –

答えて

-1

いいえ、シェーダからメインプログラムに文字列を送信する方法はありません。

あなたが通常行うことは、特定のケースで特定の色を出力することです。あなたのハードウェアに応じて、CodeXLまたはNvidia NSightも役に立ちます。

+0

シェーダをデバッグする正式な方法はありませんか? – Bob5421

+0

はいあります:NSightまたはRenderDocを使用するか、ハードウェアに適合するGPUデバッガを使用してください。あなたができないのは、文字列を出力に書き込むことだけです。 Btw .: GLSLには文字列の構文が全くありません。 – BDL

1

独自のエラーコードを使用する場合は、次の操作を実行できます。

トランスフォームのフィードバックを使用できます。 変換フィードバックcantストア文字列。頂点ごとまたはプリミティブ属性ごとに格納するために使用されます。いくつかのエラーコードを定義できます。例えば、アプリケーション

で、アプリケーションで

#define VERTICES_TRANSFORMED_WRONGLY 1

VSシェーダで

#define VERTICES_TRANSFORMED_WRONGLY 1 

void main(void) 
{ 
    if(condition for error met) 
    write error code(VERTICES_TRANSFORMED_WRONGLY) to Transform feedback. 
} 

それ時間ならば、これはフィードバックを変革読みますどんなエラーコードでも何が間違っているか知っています。

シェーダステージごとにトランスフォームフィードバックを添付できます。 [BDLによって提案された編集]: フラグメントシェイダーの後にトランスフォームフィードバックを添付することはできませんが、フラグメントシェーダーステージの場合はFBOと同様のことができます。

注:まだRenderdoc、glDebugger、Nsightのように既に紹介されているツールを使用することをお勧めします。

関連する問題