mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-04-01 19:36:42 +00:00
added black bars
This commit is contained in:
parent
e6d27cd6d0
commit
5ed04ae53e
3 changed files with 47 additions and 7 deletions
|
@ -162,6 +162,7 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const
|
||||||
mOcclusionQuery = new OcclusionQuery(&mRendering, mSkyManager->getSunNode());
|
mOcclusionQuery = new OcclusionQuery(&mRendering, mSkyManager->getSunNode());
|
||||||
|
|
||||||
mVideoPlayer = new VideoPlayer(mRendering.getScene ());
|
mVideoPlayer = new VideoPlayer(mRendering.getScene ());
|
||||||
|
mVideoPlayer->setResolution (Settings::Manager::getInt ("resolution x", "Video"), Settings::Manager::getInt ("resolution y", "Video"));
|
||||||
|
|
||||||
mSun = 0;
|
mSun = 0;
|
||||||
|
|
||||||
|
@ -843,6 +844,8 @@ void RenderingManager::windowResized(Ogre::RenderWindow* rw)
|
||||||
mCompositors->recreate();
|
mCompositors->recreate();
|
||||||
mWater->assignTextures();
|
mWater->assignTextures();
|
||||||
|
|
||||||
|
mVideoPlayer->setResolution (rw->getWidth(), rw->getHeight());
|
||||||
|
|
||||||
const Settings::CategorySettingVector& changed = Settings::Manager::apply();
|
const Settings::CategorySettingVector& changed = Settings::Manager::apply();
|
||||||
MWBase::Environment::get().getInputManager()->processChangedSettings(changed); //FIXME
|
MWBase::Environment::get().getInputManager()->processChangedSettings(changed); //FIXME
|
||||||
MWBase::Environment::get().getWindowManager()->processChangedSettings(changed); // FIXME
|
MWBase::Environment::get().getWindowManager()->processChangedSettings(changed); // FIXME
|
||||||
|
|
|
@ -950,22 +950,41 @@ VideoPlayer::VideoPlayer(Ogre::SceneManager* sceneMgr)
|
||||||
}
|
}
|
||||||
mVideoMaterial->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName("black.png");
|
mVideoMaterial->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName("black.png");
|
||||||
|
|
||||||
|
Ogre::MaterialPtr blackMaterial = Ogre::MaterialManager::getSingleton().getByName("BlackBarsMaterial", "General");
|
||||||
|
if (blackMaterial.isNull ())
|
||||||
|
{
|
||||||
|
blackMaterial = Ogre::MaterialManager::getSingleton().create("BlackBarsMaterial", "General");
|
||||||
|
blackMaterial->getTechnique(0)->getPass(0)->setDepthWriteEnabled(false);
|
||||||
|
blackMaterial->getTechnique(0)->getPass(0)->setDepthCheckEnabled(false);
|
||||||
|
blackMaterial->getTechnique(0)->getPass(0)->setLightingEnabled(false);
|
||||||
|
blackMaterial->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+2);
|
||||||
|
mBackgroundRectangle = new Ogre::Rectangle2D(true);
|
||||||
|
mBackgroundRectangle->setCorners(-1.0, 1.0, 1.0, -1.0);
|
||||||
|
mBackgroundRectangle->setMaterial("BlackBarsMaterial");
|
||||||
|
mBackgroundRectangle->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);
|
||||||
|
mBackgroundRectangle->setBoundingBox(aabInf);
|
||||||
|
|
||||||
// Attach background to the scene
|
// Attach background to the scene
|
||||||
mNode = sceneMgr->getRootSceneNode()->createChildSceneNode();
|
mNode = sceneMgr->getRootSceneNode()->createChildSceneNode();
|
||||||
mNode->attachObject(mRectangle);
|
mNode->attachObject(mRectangle);
|
||||||
|
mBackgroundNode = sceneMgr->getRootSceneNode()->createChildSceneNode();
|
||||||
|
mBackgroundNode->attachObject(mBackgroundRectangle);
|
||||||
|
|
||||||
mRectangle->setVisible(false);
|
mRectangle->setVisible(false);
|
||||||
mRectangle->setVisibilityFlags(0x1);
|
mRectangle->setVisibilityFlags(0x1);
|
||||||
|
mBackgroundRectangle->setVisible(false);
|
||||||
|
mBackgroundRectangle->setVisibilityFlags(0x1);
|
||||||
}
|
}
|
||||||
|
|
||||||
VideoPlayer::~VideoPlayer()
|
VideoPlayer::~VideoPlayer()
|
||||||
|
@ -973,13 +992,11 @@ VideoPlayer::~VideoPlayer()
|
||||||
if(mState)
|
if(mState)
|
||||||
close();
|
close();
|
||||||
|
|
||||||
if(mNode)
|
mSceneMgr->destroySceneNode(mNode);
|
||||||
mSceneMgr->destroySceneNode(mNode);
|
mSceneMgr->destroySceneNode(mBackgroundNode);
|
||||||
mNode = NULL;
|
|
||||||
|
|
||||||
if(mRectangle)
|
delete mRectangle;
|
||||||
delete mRectangle;
|
delete mBackgroundRectangle;
|
||||||
mRectangle = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoPlayer::playVideo(const std::string &resourceName)
|
void VideoPlayer::playVideo(const std::string &resourceName)
|
||||||
|
@ -991,6 +1008,7 @@ void VideoPlayer::playVideo(const std::string &resourceName)
|
||||||
close();
|
close();
|
||||||
|
|
||||||
mRectangle->setVisible(true);
|
mRectangle->setVisible(true);
|
||||||
|
mBackgroundRectangle->setVisible(true);
|
||||||
|
|
||||||
MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Video);
|
MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Video);
|
||||||
|
|
||||||
|
@ -1025,6 +1043,17 @@ void VideoPlayer::update ()
|
||||||
// Would be nice not to do this all the time...
|
// Would be nice not to do this all the time...
|
||||||
if(mState->display_ready)
|
if(mState->display_ready)
|
||||||
mVideoMaterial->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName("VideoTexture");
|
mVideoMaterial->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName("VideoTexture");
|
||||||
|
|
||||||
|
// Correct aspect ratio by adding black bars
|
||||||
|
int width = (mState->video_st->codec->width);
|
||||||
|
int height = (mState->video_st->codec->height);
|
||||||
|
|
||||||
|
float screenaspect = static_cast<float>(mWidth) / mHeight;
|
||||||
|
float videoaspect = static_cast<float>(width) / height;
|
||||||
|
float aspect_correction = videoaspect / screenaspect;
|
||||||
|
|
||||||
|
mRectangle->setCorners (std::max(-1.f, -1.f * aspect_correction), std::min(1.f, 1.f / aspect_correction),
|
||||||
|
std::min(1.f, 1.f * aspect_correction), std::max(-1.f, -1.f / aspect_correction));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1040,6 +1069,7 @@ void VideoPlayer::close()
|
||||||
MWBase::Environment::get().getSoundManager()->resumeAllSounds();
|
MWBase::Environment::get().getSoundManager()->resumeAllSounds();
|
||||||
|
|
||||||
mRectangle->setVisible(false);
|
mRectangle->setVisible(false);
|
||||||
|
mBackgroundRectangle->setVisible(false);
|
||||||
MWBase::Environment::get().getWindowManager()->removeGuiMode(MWGui::GM_Video);
|
MWBase::Environment::get().getWindowManager()->removeGuiMode(MWGui::GM_Video);
|
||||||
|
|
||||||
mSceneMgr->clearSpecialCaseRenderQueues();
|
mSceneMgr->clearSpecialCaseRenderQueues();
|
||||||
|
|
|
@ -40,6 +40,8 @@ namespace MWRender
|
||||||
|
|
||||||
bool isPlaying();
|
bool isPlaying();
|
||||||
|
|
||||||
|
void setResolution (int w, int h) { mWidth = w; mHeight = h; }
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
VideoState* mState;
|
VideoState* mState;
|
||||||
|
@ -47,7 +49,12 @@ namespace MWRender
|
||||||
Ogre::SceneManager* mSceneMgr;
|
Ogre::SceneManager* mSceneMgr;
|
||||||
Ogre::MaterialPtr mVideoMaterial;
|
Ogre::MaterialPtr mVideoMaterial;
|
||||||
Ogre::Rectangle2D* mRectangle;
|
Ogre::Rectangle2D* mRectangle;
|
||||||
|
Ogre::Rectangle2D* mBackgroundRectangle;
|
||||||
Ogre::SceneNode* mNode;
|
Ogre::SceneNode* mNode;
|
||||||
|
Ogre::SceneNode* mBackgroundNode;
|
||||||
|
|
||||||
|
int mWidth;
|
||||||
|
int mHeight;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue