我有这样的代码:
"#version 330 core\n",
"in vec3 Normal;\n",
"layout(location = 0) out vec4 Colors;\n",
"layout(location = 1) out vec3 rt;\n",
"uniform vec3 light;\n",
"void main()\n",
当我使用默认的 FBO 时,我想知道layout(location=1) 是什么意思?如果我使用双缓冲区,我想 location = 0 指向 GL_FRONT 或 GL_BACK 吗?那么1是什么意思呢?如果我使用双缓冲区,它是 GL_FRONT 吗?否则是否意味着GL_LEFT?还是直接被忽略了?
这与渲染到 FBO 时的含义相同:它代表的任何缓冲区
glDrawBuffers
says。
与 FBO 一样,默认帧缓冲区可以有多个与其关联的图像。与 FBO 不同,OpenGL 本身无法指定哪些图像处于活动状态或它们来自何处。这是在上下文创建时完成的。默认帧缓冲区最多可以有 4 个颜色缓冲区(前/后,左/右)并且(在兼容性上下文中)可能有多个辅助颜色缓冲区。
glDrawBuffers
创建从 FS 输出索引到当前帧缓冲区中的实际缓冲区的映射。因此,如果您想知道“1”的含义,则必须查看 glDrawBuffers
调用并查看该数组的索引 1 设置为什么。
如果
glDrawBuffers
没有将特定写入的 FS 输出索引路由到缓冲区,则该输出将被丢弃。