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