GLSLシェーダをデバッグします。 私が必要とするのは、文字列情報を送信することです。 私はFBOを試しましたが、これはクリーンな方法ではありませんGLSLシェーダからログを送信
ログをメインプログラムに送信する方法はありますか?
GLSLシェーダをデバッグします。 私が必要とするのは、文字列情報を送信することです。 私はFBOを試しましたが、これはクリーンな方法ではありませんGLSLシェーダからログを送信
ログをメインプログラムに送信する方法はありますか?
独自のエラーコードを使用する場合は、次の操作を実行できます。
トランスフォームのフィードバックを使用できます。 変換フィードバック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のように既に紹介されているツールを使用することをお勧めします。
私の[GLSL debug prints](https://stackoverflow.com/a/44797902/2521214)を参照してください。テキスト出力を含む領域の各フラグメントに対して同じことを印刷するだけで十分です。それは場合によっては難しく、不可能でさえあります。ここでの例:[GLSL Ray tracer](https://stackoverflow.com/a/45140313/2521214) – Spektre
https://github.com/msqrt/shader-printf – genpfault
[GLSLシェーダをデバッグするにはどうすればいいですか?] (https://stackoverflow.com/questions/2508818/how-to-debug-a-glsl-shader) –