OpenGL - 各种颜色附件的清晰颜色不同?

时间:2017-06-26 09:43:58

标签: opengl glsl

我希望用不同的清晰颜色擦拭FBO的不同颜色附件。使用GL命令可以实现这一点,还是必须在着色器中进行?

1 个答案:

答案 0 :(得分:7)

glClear(GL_COLOR_BUFFER_BIT)使用全局设置的相同颜色(GL_COLOR_CLEAR_VALUE)清除当前颜色缓冲区。

OpenGL 2 +

要为每个缓冲区指定不同的颜色,您必须通过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);

OpenGL 3.0 +

如果您已经设置了绘制缓冲区,则可以使用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);

OpenGL 4.4 +

但是,如果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);