WebGLRenderingContext.blendFuncSeparate
blendFuncSeparate方法用来分开定义混合颜色和alpha像素运算的函数。
语法
void gl.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
参数
srcRGB
GLenum类型,定义源混合因子红、绿、蓝的乘数。默认的值是gl.ONE。可能的值见下表。
dstRGB
GLenum类型,定义目标混合因子红、绿、蓝的乘数。默认的值是gl.ZERO。可能的值见下表。
srcAlpha
GLenum类型,定义源混合因子alpha的乘数。默认的值是gl.ONE。可能的值见下表。
dstAlpha
GLenum类型,定义目标混合因子alpha的乘数。默认的值是gl.ONE。可能的值见下表。
错误抛出
如果srcRGB, dstRGB, srcAlpha, or dstAlpha不是下表中列出的值,gl.INVALID_ENUM错误会被抛出。
返回值
无
常量
下列的常量可用作srcRGB, dstRGB, srcAlpha, 或 dstAlpha。
混合颜色的公式可被描述为(所有RBGA值是在0-1之间):
颜色值(RGB) = (源颜色值 * srcRGB) + (目标颜色值 * dstRGB)
值(A) = (源Alpha值 * srcAlpha) + (目标Alpha值 * dstAlpha)
常量 | RGB因子 | Alpha因子 | 描述 |
---|---|---|---|
gl.ZERO | 0,0,0 | 0 | 所有颜色都乘以0 |
gl.ONE | 1,1,1 | 1 | 所有颜色都乘以1 |
gl.SRC_COLOR | Rs,Gs,Bs | As | 所有颜色都乘以源颜色值 |
gl.ONE_MINUS_SRC_COLOR | 1-Rs,1-Gs,1-Bs | 1-As | 所有颜色都乘以1减每个源颜色值 |
gl.DST_COLOR | Rd,Gd,Bd | Ad | 所有颜色都乘以目标颜色值 |
gl.ONE_MINUS_DST_COLOR | 1-Rd,1-Gd,1-Bd | 1-Ad | 所有颜色都乘以1减每个目标颜色值 |
gl.SRC_ALPHA | As,As,As | As | 所有颜色都乘以源alpha值 |
gl.ONE_MINUS_SRC_ALPHA | 1-As,1-As,1-As | 1-As | 所有颜色都乘以1减源alpha值 |
gl.DST_ALPHA | Ad,Ad,Ad | Ad | 所有颜色都乘以目标alpha值 |
gl.ONE_MINUS_DST_ALPHA | 1-Ad,1-Ad,1-Ad | 1-Ad | 所有颜色都乘以1减目标alpha值 |
gl.SRC_ALPHA_SATURATE | min(As,1-Ad),min(As,1-Ad),min(As,1-Ad) | 1 | 所有GRB颜色乘以源alpha值和1减目标alpha值中的最小值。alpha值乘以1。 |
例子
要使用混合函数,首先必须要激活混合,使用 以gl.BLEND为参数的WebGLRenderingContext.enable()。
gl.enable(gl.BLEND); gl.blendFuncSeparate(gl.SRC_COLOR, gl.DST_COLOR, gl.ONE, gl.ZERO);
获得现有的混合函数,询问BLEND_SRC_RGB, BLEND_SRC_ALPHA, BLEND_DST_RGB和 BLEND_DST_ALPHA常数,可返回混合函数常数之一。
gl.enable(gl.BLEND);
gl.blendFunc(gl.SRC_COLOR, gl.DST_COLOR, gl.ONE, gl.ZERO);
gl.getParameter(gl.BLEND_SRC_RGB) == gl.SRC_COLOR;
// true
规范
浏览器兼容
Desktop:Chrome 9、Firefox 4.0 、 Internet Explorer 11 、Opera 12、Safari 5.1;
Mobile: Android ?、 Chrome for Android 25、 Firefox Mobile (Yes)、 IE Mobile ?、 Opera Mobile 12、 Safari Mobile 8.1;