在OpenGL中,我们可以通过片段着色器中的以下代码打开双源混合:
layout(location = 0, index = 0) out vec4 color1;
layout(location = 0, index = 1) out vec4 color2;
并通过令牌XX_SRC1_XX在混合函数中得到color2。
1.如果我想做离屏渲染,我需要加倍纹理的存储大小,因为有两种颜色输出。
1.是不是一旦我打开双源混合,我就只能将两种颜色输出到一个缓冲区?这意味着我不能通过将它们附加到GL_COLOR_ATTACHMENTi令牌来绑定多个颜色缓冲区。
1.这里的限定词“index”是否仅用于双源混合目的?
1条答案
按热度按时间6za6bjd01#
双源混合意味着混合涉及两个来自FS的颜色输出。这与要写入的图像的性质(只有数字)* 没有 * 关系。位置0仍然引用
glDrawBuffers
数组中的第0个索引,附件的工作方式与以前一样。你正在输出两种颜色。但是只有一个值(混合操作的结果)被写入。
这意味着我不能通过将多个颜色缓冲区附加到
GL_COLOR_ATTACHMENTi
令牌来绑定它们。当然,这取决于在进行双源混合时所允许的附加图像的数量,正如您的实现所指定的那样。当然,all known implementations set this to 1。甚至Vulkan实现都使用1(如果它们不支持双源混合,则使用0);唯一没有seem to be either early, broken implementations or software renderers的