提交 0f86e3cf 编写于 作者: M Mr.doob

WebGLState: Added setBlend. Related #6669.

上级 76918001
......@@ -85,7 +85,7 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {
// set GL state for depth map
_gl.clearColor( 1, 1, 1, 1 );
_gl.disable( _gl.BLEND );
_state.setBlend( false );
_gl.enable( _gl.CULL_FACE );
_gl.frontFace( _gl.CCW );
......@@ -337,7 +337,7 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {
clearAlpha = _renderer.getClearAlpha();
_gl.clearColor( clearColor.r, clearColor.g, clearColor.b, clearAlpha );
_gl.enable( _gl.BLEND );
_state.setBlend( true );
if ( scope.cullFace === THREE.CullFaceFront ) {
......
......@@ -9,6 +9,7 @@ THREE.WebGLState = function ( gl, paramThreeToGL ) {
var newAttributes = new Uint8Array( 16 );
var enabledAttributes = new Uint8Array( 16 );
var currentBlend = null;
var currentBlending = null;
var currentBlendEquation = null;
var currentBlendSrc = null;
......@@ -94,41 +95,63 @@ THREE.WebGLState = function ( gl, paramThreeToGL ) {
};
this.setBlend = function ( blend ) {
if ( blend !== currentBlend ) {
if ( blend ) {
gl.enable( gl.BLEND );
} else {
gl.disable( gl.BLEND );
}
currentBlend = blend;
}
};
this.setBlending = function ( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha ) {
if ( blending !== currentBlending ) {
if ( blending === THREE.NoBlending ) {
gl.disable( gl.BLEND );
this.setBlend( false );
} else if ( blending === THREE.AdditiveBlending ) {
gl.enable( gl.BLEND );
this.setBlend( true );
gl.blendEquation( gl.FUNC_ADD );
gl.blendFunc( gl.SRC_ALPHA, gl.ONE );
} else if ( blending === THREE.SubtractiveBlending ) {
// TODO: Find blendFuncSeparate() combination
gl.enable( gl.BLEND );
this.setBlend( true );
gl.blendEquation( gl.FUNC_ADD );
gl.blendFunc( gl.ZERO, gl.ONE_MINUS_SRC_COLOR );
} else if ( blending === THREE.MultiplyBlending ) {
// TODO: Find blendFuncSeparate() combination
gl.enable( gl.BLEND );
this.setBlend( true );
gl.blendEquation( gl.FUNC_ADD );
gl.blendFunc( gl.ZERO, gl.SRC_COLOR );
} else if ( blending === THREE.CustomBlending ) {
gl.enable( gl.BLEND );
this.setBlend( true );
} else {
gl.enable( gl.BLEND );
this.setBlend( true );
gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );
gl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
......
......@@ -360,7 +360,7 @@ THREE.LensFlarePlugin = function ( renderer, flares ) {
gl.uniform2f( uniforms.scale, scale.x, scale.y );
gl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z );
gl.disable( gl.BLEND );
state.setBlend( false );
gl.enable( gl.DEPTH_TEST );
gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );
......@@ -400,7 +400,7 @@ THREE.LensFlarePlugin = function ( renderer, flares ) {
// render flares
gl.uniform1i( uniforms.renderType, 2 );
gl.enable( gl.BLEND );
state.setBlend( true );
for ( var j = 0, jl = flare.lensFlares.length; j < jl; j ++ ) {
......
......@@ -105,7 +105,7 @@ THREE.SpritePlugin = function ( renderer, sprites ) {
state.disableUnusedAttributes();
gl.disable( gl.CULL_FACE );
gl.enable( gl.BLEND );
state.setBlend( true );
gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );
gl.vertexAttribPointer( attributes.position, 2, gl.FLOAT, false, 2 * 8, 0 );
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册