シェーダーコードのデバッグ?


13

ゲームエンジンを作成しています。パースビューカメラを使用すると、黒い画面が表示されます。共有するコードがたくさんあるため、これがなぜなのかを正確に尋ねるつもりはありません。

問題は、デバッグ方法がわからないことです。変化するのは投影行列だけです。投影行列が正常に見える場合、なぜ機能しないのかわかりません。理想的には、シェーダーが計算を行ったときにさまざまな値を出力しますが、GLSLにはprintf()関数がありません。

だから私の質問は次のとおりです。どうすれば問題をデバッグできますか?私が考えることができる唯一のことは、クライアント側でできる限り多くの値をチェックし、順列でプログラミングすることですが、私はそれを行ってどこにも行きませんでした。ビデオカードで何が起こっているかを確認する方法はありますか?私が使用できる完全に異なる技術はありますか?

私はGLSLバージョン420(およびそのバージョンに固有の機能)を使用しているため、2010年に最後に更新されたことを考えると、glslDevilはオプションではないと思います。

編集

まったく関係のないデバッグによって問題を解決できました。

回答:


2

また、glInterceptのようなプログラムを使用することもできます。これはPIXに似ていますが、OpenGL用です。すべての呼び出しをインターセプトしてログに記録する以外に、シェーダーの使用状況を表示し、実行時にシェーダーを編集することもできます。この最後のオプション(実行時にシェーダーを編集する)は、デバッグ時に非常に役立つ可能性があります。何か問題が発生するまでパーツの編集を続けることができ、色を出力して値をすばやくデバッグできるためです。

http://code.google.com/p/glintercept/


それは便利なようです。GLSL 4.20 EDITで動作するかどうかをテストします:いくつかの理由で、動作しないと思います。非推奨であり、したがって私のシェーダーコードではないOpenGLの多くの特性に依存しています。
Avi

ああ、あまりにも悪い、私はそれがそんなに古いことを知らなかった。ただし、GLSL4.2には何らかのデバッガーが必要です。私は周りに尋ねます。それまでの間、これはうまくいくでしょうか?developer.nvidia.com/content/nvidia-shader-debugger#Features
ロイT.

Cgシェーダーでのみ動作します:|
アヴィ

4

確信はありませんが、NVIDIA NsightはShaderをデバッグできるはずです。少なくとも、以前のバージョンのGLSLをサポートしていると思います(見つけることができるはずです)。Visual Studioと完全に統合でき、簡単ではありませんが便利なものがたくさんありますが、古いバージョンでは、ネットワーク経由でシェーダーをデバッグするためにそれぞれGPUを備えた2つのマシンが必要でした(最新バージョンでは「ローカル」デバッグが可能です) 。また、便利なIDEのように見えますが、GLSLデバッグ機能がないShader Designer [2]を確認してください。

[1] http://developer.nvidia.com/content/nvidia-nsight-visual-studio-edition

[2] http://www.opengl.org/sdk/tools/ShaderDesigner/


NSightが実際にシェーダーをデバッグするには、管理者権限が必要であることに注意してください。
starbeamrainbowlabs

1

残念ながら、openglのデバッグは簡単ではありません。ここに私が役に立つとわかったものがあります:

  • 呼び出しごとにglGetErrorを使用します
  • 新しいデバッグ拡張機能(ARB_debug _ ???)を使用してみてください
  • gDebuggerを使用して、各呼び出し後に画面に何が描画されるかを確認します
  • apitraceを使用して、各openglコマンドの後に何が起こるかを確認します
  • 現在の入力に基づいて異なる色を出力するようにシェーダーを変更し、特定の色が表示される理由を理解しよう
  • 描画機能を制限するすべてのOpenGL機能を無効にします:シザーテスト、深度テスト、バックフェースカリングなど。

1
これは実際には私の質問に答えません。クライアント側のOpenGL呼び出しのデバッグには役立ちますが、シェーダープログラムのデバッグには役立ちません。クライアント側のOpenGL呼び出しをデバッグする方法を知っています。
Avi

1

個人的にはまだRenderMonkeyを使用しています。ただし、実際のアプリの外観にすぎず、奇妙な制限があるため、この正確な質問には完全には適していません。十分にサポートされていませんが、GLSLをデバッグするためのより良いものは見つかりませんでした。


特にカメラの動きのようなものは、私が使用しないgl_ModelViewProjectionMatrixの変更に依存するので、rendermonkeyがここで欲しいものかどうかはわかりません。
アヴィ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.