Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
openGL渲染目标在一定数量后不工作_Opengl - Fatal编程技术网

openGL渲染目标在一定数量后不工作

openGL渲染目标在一定数量后不工作,opengl,Opengl,我将多个目标绑定到FBO。我在这里做了一个非常简单的操作,效果很好。正如您所注意到的,我附加了3个目标(此处未显示),然后又附加了5个目标,它们存储在一个数组中。然后,我进行一些计算,并将最终图像存储在m_rsm_的最后一个位置进行渲染。一切正常,最后一个过程只需将m_rsm_indirect的0到4之间的所有元素相加到第五个元素。如果我使用较少的元素,一切都可以工作,但是如果我将大小增加1并使用最后一个元素,无论我做什么,我总是得到一个黑色图像,带有一对白色水平条纹。我是否达到渲染目标的限制?

我将多个目标绑定到FBO。我在这里做了一个非常简单的操作,效果很好。正如您所注意到的,我附加了3个目标(此处未显示),然后又附加了5个目标,它们存储在一个数组中。然后,我进行一些计算,并将最终图像存储在m_rsm_的最后一个位置进行渲染。一切正常,最后一个过程只需将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);
for(int i=0;i<6;i++){
glGenTextures(1,&m_rsm_间接[i]);
glBindTexture(GL_TEXTURE_2D,m_rsm_indirect[i]);
GLTEXAGE2D(GL_纹理_2D,0,GL_RGBA8,窗宽,窗高,0,GL_RGBA,GL_浮点,NULL);
glTexParameterf(GL_纹理2D、GL_纹理最小过滤器、GL_线性);
glTexParameterf(GL_TEXTURE_2D、GL_TEXTURE_MAG_FILTER、GL_LINEAR);
glTexParameterf(GL_纹理2D、GL_纹理包裹、GL_夹具);
glTexParameterf(GL_纹理、GL_纹理、GL_包裹、GL_夹紧);
}
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);
对于(int i=0;i<5;i++)
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER,GL_COLOR_ATTACHMENT3_EXT+i,GL_TEXTURE_2D,m_rsm_indirect[i],0);

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

可以使用以下方法检索支持的渲染目标数:

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

是的,最大目标是8。那么,如果我只有8个目标,我应该如何做积累呢?我应该使用纹理数组吗?