【问题标题】:OpenGL Framebuffer size limit is 0OpenGL 帧缓冲区大小限制为 0
【发布时间】:2017-05-05 09:31:18
【问题描述】:

我使用 OpenGL 帧缓冲区对象 (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 的方法。

【问题讨论】:

  • 不,它没有。 GL_MAX_FRAMEBUFFER_WIDTH 要求至少为 16384。这可能是驱动程序错误,但我发现它更有可能是您未显示的代码中的错误。

标签: opengl fbo render-to-texture


【解决方案1】:

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

GL_ARB_framebuffer_objectGL_EXT_framebuffer_object 都没有定义 GL_MAX_FRAMEBUFFER_WIDTHGL_MAX_FRAMEBUFFER_HEIGHT

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

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

【讨论】:

    猜你喜欢
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2013-12-19
    相关资源
    最近更新 更多