Did you try without EAS_VERTEX_COLOR? As this seems to be only about textures.
I'm not familiar with EMT_ONETEXTURE_BLEND (I got away with EMT_TRANSPARENT_ADD_COLOR in the past, so it's also just try&error for me.
A quick test with example 08 (Special effects) where I added those lines worked for me.
Around // attach billboard to light
After the line: node->setMaterialTexture(0, driver->getTexture(mediaPath + "particlewhite.bmp"));
Code: Select all
video::SMaterial& material = node->getMaterial(0);
material.ZWriteEnable = true;
material.MaterialType = video::EMT_ONETEXTURE_BLEND;
material.BlendOperation = video::EBO_ADD;
u32 alphaSource = video::EAS_TEXTURE | video::EAS_VERTEX_COLOR;
material.BlendFactor = irr::video::pack_textureBlendFunc(video::EBF_SRC_ALPHA, video::EBF_ONE, video::EMFN_MODULATE_4X, alphaSource);
material.MaterialTypeParam = material.BlendFactor;
Looks better when using video::EMFN_MODULATE_1X in this case, but aside from that it seems to be fine. So can't say what is wrong in your case without some example. Might be textures, might be code.
And it's hard to tell if the thing with the BlendFactor is a bug. It's a lazy implementation which can be improved I suppose.