Opengl 获取最大数量的帧缓冲区颜色附件?

Opengl 获取最大数量的帧缓冲区颜色附件?,opengl,framebuffer,Opengl,Framebuffer,我正在开发一个OpenGL应用程序,我需要找到支持多少帧缓冲区颜色附件。有没有办法查询OpenGL中的该值?您可以通过查询 int maxColorAttachments; glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxColorAttachments); 有两个值可能会限制您可以使用的附件数量: GL\u MAX\u COLOR\u ATTACHMENTS指定FBO有多少个颜色附着点。换句话说,它对应于使用GL\u COLOR\u ATTA

我正在开发一个OpenGL应用程序,我需要找到支持多少帧缓冲区颜色附件。有没有办法查询OpenGL中的该值?

您可以通过查询

int maxColorAttachments;
glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxColorAttachments);

有两个值可能会限制您可以使用的附件数量:

  • GL\u MAX\u COLOR\u ATTACHMENTS
    指定FBO有多少个颜色附着点。换句话说,它对应于使用
    GL\u COLOR\u ATTACHMENTn
    指定附着点时可以使用的最大值
    n
    。这将限制可以同时将多少颜色纹理/渲染缓冲层附加到FBO。您可以通过以下方式获得此限制:

    GLint maxAttach = 0;
    glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxAttach);
    
    GLint maxDrawBuf = 0;
    glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuf);
    
  • GL\u MAX\u DRAW\u BUFFERS
    指定可以同时绘制到的缓冲区数量。它是允许传递到
    glDrawBuffers()
    的最大缓冲区数,也是片段着色器中允许的最大输出数。您可以通过以下方式获得此限制:

    GLint maxAttach = 0;
    glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxAttach);
    
    GLint maxDrawBuf = 0;
    glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuf);
    
这两个值不必相同。因此,您可能有一定数量的附件,但不能同时绘制所有附件

在OpenGL 3.x及更高版本中,这两个限制的最小值均为8,达到并包括当前的4.5规范