是否可以使用多目标渲染清除帧缓冲区中的某些纹理?

dar*_*ius 15 opengl fbo

我有一个framebuffer对象,我在其中使用N个纹理上的多目标渲染.在某个时候,我想清除其中一些纹理的内容,但不是全部.如果我打电话

glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Run Code Online (Sandbox Code Playgroud)

绑定到FBO的每个纹理都将被清除(我是对的吗?).有没有办法在特定的绘制缓冲区/纹理上执行此操作?

Nic*_*las 19

GL_COLOR_BUFFER_BITglClear通话将清除所有的活动的绘制颜色缓冲区,如通过指定的glDrawBuffers.因此,您可以在执行清除之前更改绘制缓冲区.

但这是不必要的状态变化.你可以简单地调用glClearBuffer,这将清除特定的缓冲区.

  • @darius:"*glClearBufferfv*"采用一系列浮点数.这就是["fv"总是意味着](https://www.opengl.org/wiki/Nomenclature#Function_suffixes).在这种情况下,它总是4浮动.就像`iv`版本需要4个有符号整数(用于清除整数格式缓冲区)和`uiv`需要4个无符号整数. (2认同)