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