我希望用不同的清晰颜色擦拭FBO的不同颜色附件。使用GL命令可以实现这一点,还是必须在着色器中进行?
答案 0 :(得分:7)
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);
如果您已经设置了绘制缓冲区,则可以使用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);
但是,如果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);