gkString createOrRetrieveHaloMaterial(const gkString& baseMatName) { gkString matName = DEFAULT_HALO_MAT; try { gkString haloMatName = baseMatName + ".halo"; Ogre::MaterialManager& mmgr = Ogre::MaterialManager::getSingleton(); if (mmgr.resourceExists(haloMatName)) matName = haloMatName; else { Ogre::MaterialPtr baseMat = mmgr.getByName(baseMatName); if (!baseMat.isNull()) { Ogre::MaterialPtr mat = mmgr.create(haloMatName, baseMat->getGroup()); baseMat->copyDetailsTo(mat); Ogre::Pass *pass = mat->getTechnique(0)->getPass(0); pass->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA); pass->setAlphaRejectSettings(Ogre::CMPF_GREATER_EQUAL, 150); pass->setDepthWriteEnabled(false); Ogre::TextureUnitState* tu = pass->createTextureUnitState(HALO_IMAGE_NAME); matName = haloMatName; } } } catch(Ogre::Exception& e) { gkLogMessage("gkParticleManager: " << e.getDescription()); } return matName; }