仅使用renderbuffer(没有帧缓冲区)来绘制屏幕外内容?

时间:2012-04-14 15:47:29

标签: iphone opengl-es textures framebuffer

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

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

感谢。

2 个答案:

答案 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