我将多个目标绑定到FBO。我在这里做了一个非常简单的操作,它的工作原理。你可以注意到我附加了3个目标(这里没有显示),然后是5个存储在数组中的目标。然后我做一些计算并存储最终图像以在m_rsm_indirect的最后位置进行渲染。一切正常,最后一遍只需要从m_rsm_indirect的0到4中取出所有元素,然后将它们加到第五个元素中。如果我使用更少的元素,一切都有效,但如果我将大小增加1并使用最后一个元素,无论我做什么,我总会得到一个带有白色横条纹的轿跑车的黑色图像。我是否达到了渲染目标的极限?我尝试将glGetInteger与GL_MAX_RENDER等一起使用,但我得到一个负数。
for (int i = 0; i < 6; i++){
glGenTextures(1, &m_rsm_indirect[i]);
glBindTexture(GL_TEXTURE_2D, m_rsm_indirect[i]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, WindowWidth, WindowHeight, 0, GL_RGBA, GL_FLOAT, NULL);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
}
glGenFramebuffers(1, &m_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_rsm, 0);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, m_rsm_color, 0);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT2_EXT, GL_TEXTURE_2D, m_rsm_pos, 0);
for (int i = 0; i < 5; i++)
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT3_EXT+i, GL_TEXTURE_2D, m_rsm_indirect[i], 0);
答案 0 :(得分:0)
您似乎很有可能超出了GPU支持的渲染目标限制。这些限制通常为2的幂,而8是支持的渲染目标数的常用值。
您可以使用以下命令检索支持的渲染目标数量:
GLint maxTargets = 0;
glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxTargets);