Answers:
通常,为了了解在管道的各个步骤中呈现的内容,建议您使用一种用于框架分析的工具。这些通常为您提供每个API调用的每个缓冲区内容的视图,这可以帮助您解决情况。
Renderdoc就是一个很好的例子,它既完全免费又开源。此外,它也受到积极支持。
另一个是Intel GPA,不幸的是,根据其网页,它最多支持OGL 3.3内核。
只是为了再添加一个,我曾经使用gDEBugger,但是自上次更新以来已经过去了很长时间。不幸的是,这已经演变为我从未使用过的AMD CodeXL。
除了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脏黑客”的迅速发展,它相当不错。