openGL渲染目标在一定数量后无效

时间:2014-07-20 15:26:32

标签: opengl

我将多个目标绑定到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);

1 个答案:

答案 0 :(得分:0)

您似乎很有可能超出了GPU支持的渲染目标限制。这些限制通常为2的幂,而8是支持的渲染目标数的常用值。

您可以使用以下命令检索支持的渲染目标数量:

GLint maxTargets = 0;
glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxTargets);