【问题标题】:Using renderbuffer only (without framebuffer) to draw offscreen content?仅使用渲染缓冲区(没有帧缓冲区)来绘制屏幕外内容?
【发布时间】:2012-04-26 15:35:56
【问题描述】:

我是否必须为我创建的每个渲染缓冲区生成并绑定一个帧缓冲区? 或者是否有机会仅创建渲染缓冲区(并将其映射到纹理或以某种方式提交给 sahder)?

我只想渲染到一个通道缓冲区以创建一些掩码以供以后使用。我认为设置一个完整的帧缓冲区将是这项任务的开销。

谢谢。

【问题讨论】:

    标签: iphone opengl-es textures framebuffer


    【解决方案1】:

    渲染缓冲区只是一个图像。您不能将一个绑定为纹理;如果你想创建一个图像用作纹理,那么你需要创建一个纹理。这就是我们有渲染缓冲区和纹理的原因:其中之一是用于您打算从中读取的内容。

    帧缓冲区是图像的集合。您不能渲染到渲染缓冲区或纹理;您渲染到 framebuffer,它本身必须有渲染缓冲区和/或附加到它们的纹理。

    您可以渲染到默认帧缓冲区或帧缓冲区对象。默认帧缓冲区中的图像不能用作纹理。因此,如果要渲染到纹理,则必须使用帧缓冲区对象。这就是 OpenGL 的工作原理。

    “设置完整的帧缓冲区”可能会涉及开销,但如果您想渲染到纹理,则必须这样做。

    【讨论】:

    • 谢谢。现在我可以看到没有 FBO 就没有渲染缓冲区。
    【解决方案2】:

    您可以改用模板缓冲区,并在准备好屏蔽输出之前禁用模板测试。

    编辑: 查看 opengl 文档中的以下调用:

    glClearStencil
    glClear(GL_STENCIL_BUFFER_BIT)
    glEnable(GL_STENCIL_TEST)
    glDisable(GL_STENCIL_TEST)
    glStencilFunc
    glStencilOp
    

    http://www.opengl.org/sdk/docs/man/xhtml/glStencilFunc.xml
    http://www.opengl.org/sdk/docs/man/xhtml/glStencilOp.xml
    http://developer.nvidia.com/system/files/akamai/gamedev/docs/stencil.pdf?download=1

    【讨论】:

    • 哇。听起来正是我需要的。我可以直接渲染到模板缓冲区吗?只需在渲染之前将其绑定为渲染缓冲区(并禁用帧缓冲区)?
    • 基本上你将如何使用它,是禁用颜色缓冲区,启用模板缓冲区,然后绘制一些形状。这些形状将被绘制到模板缓冲区。绘制完蒙版后,您将重新启用颜色缓冲区并绘制场景。根据模板缓冲区的内容以及您在 glStencilFunc() 中使用的设置,您的绘图将被屏蔽。 glStencilFunc() 和 glStencilOp() 是上面两个最重要的函数,因为它们决定了模板缓冲区将如何更新,以及它将如何影响您的渲染。
    • 啊,明白了。启用模板绘制蒙版,禁用模板绘制内容。 stencilFunc 类似于 blendFunc 吗?设置源/目标乘数?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多