Index: trunk/Horde3D/Source/Horde3DEngine/egRenderer.cpp =================================================================== --- trunk/Horde3D/Source/Horde3DEngine/egRenderer.cpp (revision 322) +++ trunk/Horde3D/Source/Horde3DEngine/egRenderer.cpp (working copy) @@ -555,6 +555,10 @@ glEnable( GL_BLEND ); glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); break; + case BlendModes::BlendSeparate: + glEnable( GL_BLEND); + glBlendFuncSeparate( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA ); + break; case BlendModes::Add: glEnable( GL_BLEND ); glBlendFunc( GL_ONE, GL_ONE ); Index: trunk/Horde3D/Source/Horde3DEngine/egShader.cpp =================================================================== --- trunk/Horde3D/Source/Horde3DEngine/egShader.cpp (revision 322) +++ trunk/Horde3D/Source/Horde3DEngine/egShader.cpp (working copy) @@ -647,6 +647,7 @@ if( !tok.checkToken( "=" ) ) return raiseError( "FX: expected '='", tok.getLine() ); if( tok.checkToken( "Replace" ) ) context.blendMode = BlendModes::Replace; else if( tok.checkToken( "Blend" ) ) context.blendMode = BlendModes::Blend; + else if( tok.checkToken( "BlendSeparate" ) ) context.blendMode = BlendModes::BlendSeparate; else if( tok.checkToken( "Add" ) ) context.blendMode = BlendModes::Add; else if( tok.checkToken( "AddBlended" ) ) context.blendMode = BlendModes::AddBlended; else if( tok.checkToken( "Mult" ) ) context.blendMode = BlendModes::Mult; Index: trunk/Horde3D/Source/Horde3DEngine/egShader.h =================================================================== --- trunk/Horde3D/Source/Horde3DEngine/egShader.h (revision 322) +++ trunk/Horde3D/Source/Horde3DEngine/egShader.h (working copy) @@ -91,6 +91,7 @@ Blend, Add, AddBlended, + BlendSeparate, Mult }; };