forked from mirror/openmw-tes3mp
Clean up the rectangle and scene node used for displaying the video
This commit is contained in:
parent
eb0e8d9e37
commit
d50698d7d1
2 changed files with 106 additions and 92 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -45,8 +45,9 @@ namespace MWRender
|
|||
VideoState* mState;
|
||||
|
||||
Ogre::SceneManager* mSceneMgr;
|
||||
Ogre::Rectangle2D* mRectangle;
|
||||
Ogre::MaterialPtr mVideoMaterial;
|
||||
Ogre::Rectangle2D* mRectangle;
|
||||
Ogre::SceneNode* mNode;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue