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