OpenGLでフレームバッファオブジェクトにレンダリングされているものをデバッグするにはどうすればよいですか?


17

画面にレンダリングされている点群があります。各ポイントには、位置と色、IDがあります。

各ポイントのIDをテクスチャにレンダリングするように求められたので、FBOを作成し、色用と深さ用の2つのテクスチャを添付しました。このオフスクリーンレンダリングに必要なVAOとVBOを作成し、各ポイントの位置とIDをアップロードしました。

FBOへのレンダリングが完了したら、カラーテクスチャのピクセルを読み取ってglReadPixels()値を確認しますが、すべてクリアされているように見えます。つまり、持っている値はと同じglClearColor()です。

FBOのカラーテクスチャにレンダリングされているものをデバッグする方法はありますか?あなたが提供するかもしれない任意のヒントは非常に歓迎されています。

回答:


21

一般に、パイプラインのさまざまなステップで何がレンダリングされるかを確認するには、フレーム分析用のツールの使用をお勧めします。これらは通常、各API呼び出しの各バッファーの内容のビューを提供し、これは状況に役立ちます。

非常に良いものは、完全に無料でオープンソースのRenderdocです。また、積極的にサポートされています。

もう1つはIntel GPAで、残念ながらWebページによると、OGL 3.3コアまでサポートしています。

もう1つ追加するために、以前はgDEBuggerを使用していましたが、前回の更新から長い間経過しています。これは、残念ながら私が使用したことのないAMD CodeXLに進化しました。


さらに、キーを押したときに指定されたfboをイメージにダンプするコマンドもあります。それはローテクな方法です。
ホルヘロドリゲス

また、視覚化FBOにレンダリングを行うために、適切な深度テストの設定があることを確認することをお勧めします。
rys

古いGLバージョンでは、時々gDEbuggerを時々使用します。CodeXLはそれのより現代的なバージョンであり、ここで見つけることができます:github.com/GPUOpen-Tools/CodeXLのここapitraceページのデバッグツールグラフィックスの包括的なリストがあることを注意:apitrace.github.io/#linksを
ビム

11

gbufferを使用するアプリケーションのFBOからデータを取得するために、いくつかのアプリケーション/ API /ライブラリをテストしました。数か月苦労した後、OpenGL、Direct3D、およびWebGLをデバッグするためにGithubで利用可能なapitraceを発見しました。WindowsとLinuxで問題なく使用しました。

それがあなたの役に立つことを願っています。


7

cifzの応答に加えて、あまりコードを必要としないFBOを視覚化する別の方法は、glBlitFramebuffer()を使用してフレームバッファーからウィンドウにピクセルを転送することです。

// XXX WARNING: Untested code follows

// Blit from fbo...
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
// ...to the front buffer.
glBindFramebuffer(GL_WRITE_FRAMEBUFFER, GL_FRONT);

GLsizei HalfWindowWidth = (GLsizei)(WindowWidth / 2.0f);
GLsizei HalfWindowHeight = (GLsizei)(WindowHeight / 2.0f);

// Blit attachment 0 to the lower-left quadrant of the window
glReadBuffer(GL_COLOR_ATTACHMENT0);
glBlitFramebuffer(0, 0, FboWidth, FboHeight,
                  0, 0, HalfWindowWidth, HalfWindowHeight,
                  GL_COLOR_BUFFER_BIT, GL_LINEAR);

// Blit attachment 1 to the lower-right quadrant of the window
glReadBuffer(GL_COLOR_ATTACHMENT1);
glBlitFramebuffer(0, 0, FboWidth, FboHeight,
                  HalfWindowWidth, 0, WindowWidth, HalfWindowHeight,
                  GL_COLOR_BUFFER_BIT, GL_LINEAR);

// ...and so on. You can switch FBOs if you have more than one to read from.

いくつかの明らかな「落とし穴」があります。HDRバッファーはおそらく期待する方法を視覚化せず、おそらく深さ/ステンシルバッファーを明らかな方法で「見る」ことはできず、FBOのサイズがブリットされる領域と一致しない場合、拡大/縮小方法は非常に単純かもしれません。

しかし、クイックアンドダーティハックが進むにつれて、それはかなり良いことです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.