我是否必须为我创建的每个渲染缓冲区生成并绑定一个帧缓冲区?或者是否有机会仅创建渲染缓冲区(并将其映射到纹理或以某种方式提交给 sahders)?
我只想渲染到一个通道缓冲区以创建一些掩码以供以后使用。我认为设置一个完整的帧缓冲区将是这项任务的开销。
谢谢。
我是否必须为我创建的每个渲染缓冲区生成并绑定一个帧缓冲区?或者是否有机会仅创建渲染缓冲区(并将其映射到纹理或以某种方式提交给 sahders)?
我只想渲染到一个通道缓冲区以创建一些掩码以供以后使用。我认为设置一个完整的帧缓冲区将是这项任务的开销。
谢谢。
渲染缓冲区只是一个图像。您不能将一个绑定为纹理;如果你想创建一个图像用作纹理,那么你需要创建一个纹理。这就是我们有渲染缓冲区和纹理的原因:其中之一是用于您不打算从中读取的内容。
帧缓冲区是图像的集合。您不能渲染到渲染缓冲区或纹理;您渲染到framebuffer,它本身必须有渲染缓冲区和/或附加到它们的纹理。
您可以渲染到默认帧缓冲区或帧缓冲区对象。默认帧缓冲区中的图像不能用作纹理。因此,如果要渲染到纹理,则必须使用帧缓冲区对象。这就是 OpenGL 的工作原理。
“设置完整的帧缓冲区”可能会涉及开销,但如果要渲染到纹理,则必须这样做。
您可以改用模板缓冲区,然后禁用模板测试,直到您准备好屏蔽输出。
编辑: 查看 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