Opengl GL_混合-更改用作Alpha的通道

Opengl GL_混合-更改用作Alpha的通道,opengl,alphablending,Opengl,Alphablending,如果我有一个使用不带alpha的颜色格式的Renderbuffer,例如GL_RG8,我如何告诉alpha混合器使用alpha的绿色通道?这可以在使用swizzle遮罩的纹理中完成,但由于renderbuffers不支持这些,我该怎么办 我当前的blendFunc是GL_SRC_ALPHA,GL_ONE_减去_SRC_ALPHA片段着色器的每个用户定义输出包含4个通道:RGBA。无论输出将写入的目标的图像格式如何,这都是正确的。这些输出是混合操作的源颜色 所以只需像正常情况一样写入输出的alph

如果我有一个使用不带alpha的颜色格式的Renderbuffer,例如
GL_RG8
,我如何告诉alpha混合器使用alpha的绿色通道?这可以在使用swizzle遮罩的纹理中完成,但由于renderbuffers不支持这些,我该怎么办


我当前的blendFunc是
GL_SRC_ALPHA,GL_ONE_减去_SRC_ALPHA

片段着色器的每个用户定义输出包含4个通道:RGBA。无论输出将写入的目标的图像格式如何,这都是正确的。这些输出是混合操作的源颜色


所以只需像正常情况一样写入输出的alpha。alpha不会写入帧缓冲区图像并不重要。它仍然是源颜色的一部分,因此仍然可以用于混合目的。

片段着色器的每个用户定义输出包含4个通道:RGBA。无论输出将写入的目标的图像格式如何,这都是正确的。这些输出是混合操作的源颜色


所以只需像正常情况一样写入输出的alpha。alpha不会写入帧缓冲区图像并不重要。它仍然是源颜色的一部分,因此它仍然可以用于混合目的。

使用
GL_254;u颜色
glBlendFunc
如何,但这将使用RGB而不仅仅是G.@Spektre不幸的是,在我的情况下,红色通道存储与alpha无关的信息,因此无法工作:(您是否尝试使用目标“alpha”或片段着色器输出提供的alpha(即:源颜色)?@Fuzzyzilla:“这可以在使用旋转遮罩的纹理中完成”不,它不能。Swizzle掩码只适用于从着色器读取。混合操作不应用Swizzle。@NicolBolas我当前的blendFunc是
GL_SRC_ALPHA,GL_ONE_减去_SRC_ALPHA
。另外,感谢您关于Swizzle掩码的声明,我在某个地方读到Swizzle掩码会影响所有读取操作,甚至是内置操作(例外:blits),但这可能是不正确的。使用
glBlendFunc
怎么办?\u COLOR
但这将使用RGB而不仅仅是G.@Spektre不幸的是,在我的情况下,红色通道存储与alpha无关的信息,因此无法工作:(您是否尝试使用目标“alpha”或者片段着色器输出提供的alpha(即:源颜色)?@Fuzzyzilla:“这可以在使用旋转遮罩的纹理中完成”不,它不能。Swizzle掩码只适用于从着色器读取。混合操作不应用Swizzle。@NicolBolas我当前的blendFunc是
GL_SRC_ALPHA,GL_ONE_减去_SRC_ALPHA
。另外,感谢您关于Swizzle掩码的声明,我在某个地方读到Swizzle掩码会影响所有读取操作,甚至是内置操作(例外:blits),但这可能是不正确的。“片段着色器的每个用户定义输出包含4个通道:RGBA。无论输出将写入目标的图像格式如何,这都是正确的。”这就是我的问题。我使用了
out vec2 gl\u FragColor
,这在禁用gl\u混合时可能会起到预期的作用,但将其更改为
vec4
,并使用在G和a通道上复制绿色的输出,使其与alpha混合一起工作。感谢您的帮助!“片段着色器的每个用户定义输出包含4个通道:RGBA。无论输出将写入目标的图像格式如何,这都是正确的。“这是我的问题。我使用了
out vec2 gl\u FragColor
,这在禁用gl\u混合时可能会起到预期的作用,但将其更改为
vec4
,并使用在输出的G和a通道上复制绿色使其与alpha混合一起工作。感谢您的帮助!