OpenGL 帧缓冲区大小限制为 0

Iva*_*cov 0 opengl fbo render-to-texture

我使用 OpenGL FrameBuffer Objects (FBO) 来渲染使用 GL_ARB_FRAMEBUFFER_OBJECT 或 GL_EXT_FRAMEBUFFER_OBJECT 扩展的纹理。

但是,有大量显卡(主要是英特尔,带有 OGL 2.0 甚至 3.0)支持 GL_ARB_FRAMEBUFFER_OBJECT 但具有 GL_MAX_FRAMEBUFFER_WIDTH=0 和 GL_MAX_FRAMEBUFFER_HEIGHT=0,因此当我尝试将纹理附加到 FBO 时失败。

这是否真的意味着 FBO 不能用于渲染这些显卡上的纹理?有解决方法吗?渲染到纹理是一项非常重要的渲染技术,它在任何地方都可以很好地与 Direct3D 配合使用,因此也应该有一种方法可以使用 OpenGL 来使用它。

der*_*ass 5

但是,有大量视频卡(主要是英特尔,带有 OGL 2.0 甚至 3.0)支持GL_ARB_FRAMEBUFFER_OBJECT但具有GL_MAX_FRAMEBUFFER_WIDTH=0GL_MAX_FRAMEBUFFER_HEIGHT=0,因此当我尝试将纹理附加到 FBO 时失败。

既不定义GL_ARB_framebuffer_object也不GL_EXT_framebuffer_object定义GL_MAX_FRAMEBUFFER_WIDTHGL_MAX_FRAMEBUFFER_HEIGHT

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

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