Webgl混合正在混合为白色

Webgl混合正在混合为白色,webgl,alphablending,blending,Webgl,Alphablending,Blending,我已经为webgl编写了一个库,它有许多测试,并且运行这些测试非常好,包括我的混合测试 我已经将测试设置为对Src_Alpha进行标准混合,1减去Src_Alpha,测试会正确地呈现结果: 此图像由1000条线相交生成,所有线的alpha值均为0.2。请注意,图像在任何给定点都不会产生褪色的白色 这也是使用webgl Spector插件为chrome生成的当前混合状态: Blend State BLEND: true BLEND_COLOR: 0, 0, 0, 0 BLEND_DST_ALPH

我已经为webgl编写了一个库,它有许多测试,并且运行这些测试非常好,包括我的混合测试

我已经将测试设置为对Src_Alpha进行标准混合,1减去Src_Alpha,测试会正确地呈现结果:

此图像由1000条线相交生成,所有线的alpha值均为0.2。请注意,图像在任何给定点都不会产生褪色的白色

这也是使用webgl Spector插件为chrome生成的当前混合状态:

Blend State
BLEND: true
BLEND_COLOR: 0, 0, 0, 0
BLEND_DST_ALPHA: ONE_MINUS_SRC_ALPHA
BLEND_DST_RGB: ONE_MINUS_SRC_ALPHA
BLEND_EQUATION_ALPHA: FUNC_ADD
BLEND_EQUATION_RGB: FUNC_ADD
BLEND_SRC_ALPHA: SRC_ALPHA
BLEND_SRC_RGB: SRC_ALPHA
现在,我使用相同的库,在布局中渲染相同的边,它们的渲染方式如下:

这些边的不透明度为0.2。这是Spector混合模式:

Blend State
BLEND: true
BLEND_COLOR: 0, 0, 0, 0
BLEND_DST_ALPHA: ONE_MINUS_SRC_ALPHA
BLEND_DST_RGB: ONE_MINUS_SRC_ALPHA
BLEND_EQUATION_ALPHA: FUNC_ADD
BLEND_EQUATION_RGB: FUNC_ADD
BLEND_SRC_ALPHA: SRC_ALPHA
BLEND_SRC_RGB: SRC_ALPHA
我在桌子上敲打着脑袋,试图弄清楚这两种情况之间的区别

着色器逻辑只是将顶点上的颜色交给片段着色器,因此不存在预乘字母

我只需要想一想还有什么能以如此凶残的方式影响混合。我可以发布任何需要的额外信息

编辑:要在此环境中显示相同的精确测试,以下是滚轮渲染并以某种方式添加到白色冲洗中:


我的库中似乎存在一些不好的未定义行为:

我抓取了gl上下文两次:canvas.getContext(…),每一个都可能有不同的属性,比如上下文的预乘alpha和alpha设置属性


当我解决这个问题时,这个奇怪的混合错误消失了。因此,我假设两个上下文抓取之间的预乘alpha属性在某种程度上是不一致的。

您可能会发现这很有帮助:这并不是因为不了解webgl是如何进行混合的。我已经阅读了足够多的材料来正确地理解它,在我使用的上下文设置中只存在未定义的行为。从我的设置和输出中可以看出,混合模式设置非常正确。