blendfunc 的常量参数 sfactor 和 dfactor

constant parameters sfactor and dfactor of blendfunc

为什么在 blendFunc(sfactor, dfactor) 的参数中,下面的特殊情况是不可能的?

*如果将常量颜色和常量 alpha 值一起用作源因子和目标因子,将引发 gl.INVALID_ENUM 错误。

我想做这个特殊案例:

gl.blendColor(0.2,0.5,0.7,0.8);
gl.blendFunc(gl.CONSTANT_ALPHA, gl.CONSTANT_COLOR);
// 颜色(RGBA) = (sourceColor * CONSTANT_ALPHA) + (destination* CONSTANT_COLOR)

我认为这意味着: 颜色(RGBA) = 源颜色 * (0.8,0.8,0.8,0.8) + 目标 * (0.2,0.5,0.7,0.8)

但是如果这个公式是正确的,为什么会生成错误消息?

why does it generate an error message

“简单”的答案是“规范需要它”。 WebGL 1.0 规范的第 6.15 节说:

In the WebGL API, constant color and constant alpha cannot be used together as source and destination factors in the blend function. A call to blendFunc will generate an INVALID_OPERATION error if one of the two factors is set to CONSTANT_COLOR or ONE_MINUS_CONSTANT_COLOR and the other to CONSTANT_ALPHA or ONE_MINUS_CONSTANT_ALPHA.

因此,即使您可以从数学上定义混合因子的这种组合会发生什么,WebGL 还是禁止使用它。现在至于 为什么 是这样...这个 github 问题 (https://github.com/KhronosGroup/WebGL/issues/2938) 解释说这是由于 Direct3D 和 OpenGL 之间的差异:D3D 不允许恒定 alpha(仅恒定颜色),因此 ANGLE 通过使用 (a,a,a,a) 的颜色来模拟恒定 alpha。但是,如果您使用颜色槽来保存 alpha,则没有任何剩余槽可用于颜色。因此限制同时使用两者。