[11085] | 1 | #ifndef _GlowMaterialListener_H__ |
---|
| 2 | #define _GlowMaterialListener_H__ |
---|
| 3 | |
---|
| 4 | #include <Ogre.h> |
---|
| 5 | #include <OgreMaterialManager.h> |
---|
| 6 | |
---|
| 7 | namespace orxonox |
---|
| 8 | { |
---|
| 9 | class GlowMaterialListener : public Ogre::MaterialManager::Listener |
---|
| 10 | { |
---|
| 11 | public: |
---|
| 12 | GlowMaterialListener() |
---|
| 13 | { |
---|
| 14 | mBlackMat = Ogre::MaterialManager::getSingleton().create("mGlowBlack", "Internal"); |
---|
| 15 | mBlackMat->getTechnique(0)->getPass(0)->setDiffuse(0,0,0,0); |
---|
| 16 | mBlackMat->getTechnique(0)->getPass(0)->setSpecular(0,0,0,0); |
---|
| 17 | mBlackMat->getTechnique(0)->getPass(0)->setAmbient(0,0,0); |
---|
| 18 | mBlackMat->getTechnique(0)->getPass(0)->setSelfIllumination(0,0,0); |
---|
[11089] | 19 | |
---|
| 20 | mTransparentMat = Ogre::MaterialManager::getSingleton().create("mGlowTransparent", "Internal"); |
---|
| 21 | mTransparentMat->getTechnique(0)->getPass(0)->setDiffuse(0,0,0,0); |
---|
| 22 | mTransparentMat->getTechnique(0)->getPass(0)->setSpecular(0,0,0,0); |
---|
| 23 | mTransparentMat->getTechnique(0)->getPass(0)->setAmbient(0,0,0); |
---|
| 24 | mTransparentMat->getTechnique(0)->getPass(0)->setSelfIllumination(0,0,0); |
---|
| 25 | mTransparentMat->getTechnique(0)->getPass(0)->setSceneBlending(Ogre::SBT_ADD); |
---|
| 26 | mTransparentMat->getTechnique(0)->getPass(0)->setDepthWriteEnabled(false); |
---|
[11085] | 27 | } |
---|
| 28 | |
---|
[11089] | 29 | Ogre::Technique* handleSchemeNotFound(unsigned short, const Ogre::String& schemeName, Ogre::Material* mat, unsigned short, const Ogre::Renderable*) |
---|
[11085] | 30 | { |
---|
| 31 | if (schemeName == "glow") |
---|
| 32 | { |
---|
[11089] | 33 | // try to figure out if the original material is transparent. if yes, use a black transparent material, otherwise a black opaque one. |
---|
[11095] | 34 | if (mat->isTransparent()) |
---|
| 35 | return mTransparentMat->getTechnique(0); |
---|
[11089] | 36 | else |
---|
| 37 | return mBlackMat->getTechnique(0); |
---|
[11085] | 38 | } |
---|
| 39 | return NULL; |
---|
| 40 | } |
---|
| 41 | |
---|
| 42 | private: |
---|
| 43 | Ogre::MaterialPtr mBlackMat; |
---|
[11089] | 44 | Ogre::MaterialPtr mTransparentMat; |
---|
[11085] | 45 | }; |
---|
| 46 | } |
---|
| 47 | |
---|
| 48 | #endif /* _GlowMaterialListener_H__ */ |
---|