我总共有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
的全部要点是将这些片段颜色编号映射到帧缓冲区中的实际缓冲区。