如何调试在OpenGL中渲染到帧缓冲区对象的内容?


17

我有一个点云正在渲染到屏幕上。每个点都有其位置和颜色以及ID。

我被要求将每个点的ID渲染到纹理,因此我创建了FBO并附加了两个纹理,一个用于颜色,一个用于深度。我为此屏幕外渲染创建了必要的VAO和VBO,并为每个点上载了其位置和ID。

完成向FBO的渲染后,我将读取带有颜色纹理的像素glReadPixels()以查看其值,但它们似乎都被清除了,即它们具有的值与相同glClearColor()

有什么方法可以调试将其渲染为FBO的颜色纹理的东西吗?非常欢迎您提供任何提示。

Answers:


21

通常,为了了解在管道的各个步骤中呈现的内容,建议您使用一种用于框架分析的工具。这些通常为您提供每个API调用的每个缓冲区内容的视图,这可以帮助您解决情况。

Renderdoc就是一个很好的例子,它既完全免费又开源。此外,它也受到积极支持。

另一个是Intel GPA,不幸的是,根据其网页,它最多支持OGL 3.3内核。

只是为了再添加一个,我曾经使用gDEBugger,但是自上次更新以来已经过去了很长时间。不幸的是,这已经演变为我从未使用过的AMD CodeXL


另外,有时我还会有一个命令,当我按下一个键时,该命令会将指定的fbo转储到图像中。这是低技术的方式。
Jorge Rodriguez

确保您具有正确的深度测试设置也是一个好主意,以使渲染进入可视化FBO。
2013年

对于较旧的GL版本,我仍会不时使用gDEbugger。CodeXL是它的更新版本,可以在这里找到:github.com/GPUOpen-Tools/CodeXL请注意,此处的apitrace页面上有图形调试工具的完整列表:apitrace.github.io/#links
Bim

11

我测试了几个应用程序/ API /库,以从使用gbuffer的应用程序中的FBO获取数据。经过几个月的苦难,我发现Github上有可用的apitrace来调试OpenGL,Direct3D和WebGL。我在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的大小如果与遮盖区域不匹配,则放大/缩小方法可能会非常幼稚。

但是,随着“ n脏黑客”的迅速发展,它相当不错。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.