Clean up the rectangle and scene node used for displaying the video

This commit is contained in:
Chris Robinson 2012-12-15 04:01:52 -08:00
parent eb0e8d9e37
commit d50698d7d1
2 changed files with 106 additions and 92 deletions

View file

@ -941,24 +941,30 @@ void VideoState::deinit()
VideoPlayer::VideoPlayer(Ogre::SceneManager* sceneMgr)
: mState(NULL)
, mSceneMgr(sceneMgr)
, mVideoMaterial(NULL)
, mRectangle(NULL)
, mNode(NULL)
{
mVideoMaterial = Ogre::MaterialManager::getSingleton().create("VideoMaterial", "General");
mVideoMaterial->getTechnique(0)->getPass(0)->setDepthWriteEnabled(false);
mVideoMaterial->getTechnique(0)->getPass(0)->setDepthCheckEnabled(false);
mVideoMaterial->getTechnique(0)->getPass(0)->setLightingEnabled(false);
mVideoMaterial->getTechnique(0)->getPass(0)->createTextureUnitState();
mVideoMaterial->getTechnique(0)->getPass(0)->createTextureUnitState()->setTextureName("black.png");
mRectangle = new Ogre::Rectangle2D(true);
mRectangle->setCorners(-1.0, 1.0, 1.0, -1.0);
mRectangle->setMaterial("VideoMaterial");
mRectangle->setRenderQueueGroup(Ogre::RENDER_QUEUE_OVERLAY+1);
// Use infinite AAB to always stay visible
Ogre::AxisAlignedBox aabInf;
aabInf.setInfinite();
mRectangle->setBoundingBox(aabInf);
// Attach background to the scene
Ogre::SceneNode* node = sceneMgr->getRootSceneNode()->createChildSceneNode();
node->attachObject(mRectangle);
mNode = sceneMgr->getRootSceneNode()->createChildSceneNode();
mNode->attachObject(mRectangle);
mRectangle->setVisible(false);
mRectangle->setVisibilityFlags(0x1);
}
@ -967,6 +973,14 @@ void VideoState::deinit()
{
if(mState)
close();
if(mNode)
mSceneMgr->destroySceneNode(mNode);
mNode = NULL;
if(mRectangle)
delete mRectangle;
mRectangle = NULL;
}
void VideoPlayer::playVideo(const std::string &resourceName)
@ -1007,13 +1021,11 @@ void VideoState::deinit()
{
mState->refresh = false;
mState->video_refresh_timer();
}
}
if (mState && mState->display_ready && !Ogre::TextureManager::getSingleton ().getByName ("VideoTexture").isNull ())
// Would be nice not to do this all the time...
if(mState->display_ready)
mVideoMaterial->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName("VideoTexture");
else
mVideoMaterial->getTechnique(0)->getPass(0)->getTextureUnitState (0)->setTextureName ("black.png");
}
}
}
void VideoPlayer::close()
@ -1037,4 +1049,5 @@ void VideoState::deinit()
{
return mState != NULL;
}
}

View file

@ -45,8 +45,9 @@ namespace MWRender
VideoState* mState;
Ogre::SceneManager* mSceneMgr;
Ogre::Rectangle2D* mRectangle;
Ogre::MaterialPtr mVideoMaterial;
Ogre::Rectangle2D* mRectangle;
Ogre::SceneNode* mNode;
};
}