我希望用不同的清晰颜色擦拭FBO的不同颜色附件.使用GL命令可以实现这一点,还是必须在着色器中执行此操作?
glClear(GL_COLOR_BUFFER_BIT)使用全局设置(GL_COLOR_CLEAR_VALUE)的相同颜色清除当前颜色缓冲区.
要为每个缓冲区指定不同的颜色,您必须通过以下方式更改当前缓冲区glDrawBuffer:
glDrawBuffer(GL_COLOR_ATTACHMENT0);
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT);
glDrawBuffer(GL_COLOR_ATTACHMENT1);
glClearColor(1,0,0,1);
glClear(GL_COLOR_BUFFER_BIT);
Run Code Online (Sandbox Code Playgroud)
如果您已经设置了绘制缓冲区,则可以使用glClearBuffer它缩短为:
static const GLenum draw_buffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 };
glDrawBuffers(2, draw_buffers);
// ...
static const float transparent[] = { 0, 0, 0, 0 };
glClearBufferfv(GL_COLOR, 0, transparent);
static const float red[] = { 1, 0, 0, 1 };
glClearBufferfv(GL_COLOR, 1, red);
Run Code Online (Sandbox Code Playgroud)
但是,如果FBO由纹理支持,那么最简单的方法是glClearTexImage直接在这些纹理上使用:
// clear to transparent:
glClearTexImage(color_texture0, 0, GL_RGBA, GL_FLOAT, 0);
// clear to specified color:
static const float red = { 1, 0, 0, 1 };
glClearTexImage(color_texture1, 0, GL_RGBA, GL_FLOAT, red);
Run Code Online (Sandbox Code Playgroud)