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_WIDTH
或 GL_MAX_FRAMEBUFFER_HEIGHT
。
这些枚举实际上是在 GL_ARB_framebuffer_no_attachments
(自 OpenGL 4.3 以来的核心)中添加的,因此难怪某些 Intel GPU 不支持这些。 (如果你检查错误,你会注意到你的 glGet
s 中的一些 GL_INVALID_ENUM
- 所以它没有返回零,它在获取时出错,将变量的内容保留为这是以前)。但是,要点是这些限制仅与没有任何附件 的帧缓冲区有关,因此您在这里查询的是错误的属性。
帧缓冲区没有明确的大小限制,但每种附件类型都有大小限制。渲染缓冲区在任何维度上最多 GL_MAX_RENDERBUFFER_SIZE
,2D 纹理最多 GL_TEXTURE_SIZE
。如果您想一次渲染到目标,您可能还想关心 GL_MAX_VIEWPORT_DIMS
.
我使用 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 havingGL_MAX_FRAMEBUFFER_WIDTH=0
andGL_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_WIDTH
或 GL_MAX_FRAMEBUFFER_HEIGHT
。
这些枚举实际上是在 GL_ARB_framebuffer_no_attachments
(自 OpenGL 4.3 以来的核心)中添加的,因此难怪某些 Intel GPU 不支持这些。 (如果你检查错误,你会注意到你的 glGet
s 中的一些 GL_INVALID_ENUM
- 所以它没有返回零,它在获取时出错,将变量的内容保留为这是以前)。但是,要点是这些限制仅与没有任何附件 的帧缓冲区有关,因此您在这里查询的是错误的属性。
帧缓冲区没有明确的大小限制,但每种附件类型都有大小限制。渲染缓冲区在任何维度上最多 GL_MAX_RENDERBUFFER_SIZE
,2D 纹理最多 GL_TEXTURE_SIZE
。如果您想一次渲染到目标,您可能还想关心 GL_MAX_VIEWPORT_DIMS
.