我总共有5个渲染目标。我使用相同的着色器写入第一个着色器,然后以单独的方式写入最后一个着色器。

在将渲染调用到前四个目标之前,我调用了:

GLenum drawBuffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1,  GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3};
glDrawBuffers(4, drawBuffers);

但是,当我将其称为第二遍并且只想写入最后一个,即第5个目标时,为什么以下内容会给出奇怪的结果?
GLenum drawBuffers[] = { GL_COLOR_ATTACHMENT4 };
glDrawBuffers(1, drawBuffers);

为什么我必须改为使用:
GLenum drawBuffers[] = { GL_NONE, GL_NONE, GL_NONE, GL_NONE, GL_COLOR_ATTACHMENT4 };
glDrawBuffers(5, drawBuffers);

这仅仅是glDrawBuffers()的工作原理,还是由其他原因引起的?

编辑:关于Jarrods注释的固定代码

最佳答案

是的,这只是how glDrawBuffers works。但这是有原因的。

片段着色器写入映射到某些“颜色数字”的颜色输出。这些与GL_COLOR_ATTACHMENT''i''号无关。 glDrawBuffers的全部要点是将这些片段颜色编号映射到帧缓冲区中的实际缓冲区。

07-27 13:13