所以我正在研究一种与OSX上的OpenGL Profiler类似的功能,它允许我提取有关OpenGL的后台缓冲区及其当前包含的内容的信息。由于函数的性质,我无法访问包含深度缓冲区ID的应用程序变量,并且需要依赖GL函数本身来向我提供此信息。
我已经有了另一个函数将实际的FBO上下文图像复制到普通的GL纹理中,并且已经成功提取了普通的Draw缓冲区,并在下面的(示例)函数调用中使用一系列glGetIntegerv()将它们保存为图像文件。
但我似乎无法找到一个常量/函数可用于从缓冲区缓冲区中提取缓冲区信息(例如类型,纹理ID)(我已经查看了几次),我考虑到之前在其他GL分析工具中已经完成,我非常肯定是可能的。
所以,这是我第一次发现需要在这里提问,并且想知道这里是否有人知道是否可能,或者我是否真的需要在应用程序设置它时捕获该值而不是试图将当前值从GL上下文中拉出来?
// ......
GLint savedReadFBO = GL_ZERO;
GLenum savedReadBuffer = GL_BACK;
glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, &savedReadFBO);
glGetIntegerv(GL_READ_BUFFER, (GLint *) &savedReadBuffer);
// Try to obtain current draw buffer
GLint currentDrawFBO;
GLenum currentDrawBuffer = GL_NONE;
glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, ¤tDrawFBO);
glGetIntegerv(GL_DRAW_BUFFER0, (GLint *) ¤tDrawBuffer);
// We'll temporarily bind the drawbuffer for reading to pull out the current data.
// Bind drawbuffer FBO to readbuffer
if (savedReadFBO != currentDrawFBO)
{
glBindFramebuffer(GL_READ_FRAMEBUFFER, currentDrawFBO);
}
// Bind the read buffer and copy image
glReadBuffer(currentDrawBuffer);
// ....commands to fetch actual buffer content here....
// Restore the old read buffer
glBindFramebuffer(GL_READ_FRAMEBUFFER, savedReadFBO);
glReadBuffer(savedReadBuffer);
// .......