OpenGL 帧缓冲区大小限制为 0

OpenGL Framebuffer size limit is 0

我使用 OpenGL FrameBuffer 对象 (FBO) 使用 GL_ARB_FRAMEBUFFER_OBJECT 或 GL_EXT_FRAMEBUFFER_OBJECT 扩展渲染到纹理。

然而,有相当多的显卡(主要是 Intel,OGL 2.0 甚至 3.0)支持 GL_ARB_FRAMEBUFFER_OBJECT 但 GL_MAX_FRAMEBUFFER_WIDTH=0 和 GL_MAX_FRAMEBUFFER_HEIGHT=0,所以它当我尝试将纹理附加到 FBO 时失败。

这是否真的意味着 FBO 不能用于渲染这些视频卡上的纹理?有解决方法吗? 渲染到纹理是一种非常重要的渲染技术,它在任何地方都可以与 Direct3D 一起很好地工作,所以应该有一种方法可以在 OpenGL 中使用它。

However, there are significant number of videocards (mostly Intel, with OGL 2.0 and even 3.0) supporting GL_ARB_FRAMEBUFFER_OBJECT but having GL_MAX_FRAMEBUFFER_WIDTH=0 and GL_MAX_FRAMEBUFFER_HEIGHT=0, so it fails when I try to attach a texture to FBO.

GL_ARB_framebuffer_object nor GL_EXT_framebuffer_object 都没有定义 GL_MAX_FRAMEBUFFER_WIDTHGL_MAX_FRAMEBUFFER_HEIGHT

这些枚举实际上是在 GL_ARB_framebuffer_no_attachments(自 OpenGL 4.3 以来的核心)中添加的,因此难怪某些 Intel GPU 不支持这些。 (如果你检查错误,你会注意到你的 glGets 中的一些 GL_INVALID_ENUM - 所以它没有返回零,它在获取时出错,将变量的内容保留为这是以前)。但是,要点是这些限制仅与没有任何附件 的帧缓冲区有关,因此您在这里查询的是错误的属性。

帧缓冲区没有明确的大小限制,但每种附件类型都有大小限制。渲染缓冲区在任何维度上最多 GL_MAX_RENDERBUFFER_SIZE,2D 纹理最多 GL_TEXTURE_SIZE。如果您想一次渲染到目标,您可能还想关心 GL_MAX_VIEWPORT_DIMS.