Fix race preview crash (Fixes #1808)

This commit is contained in:
scrawl 2014-08-13 19:30:46 +02:00
parent 28e61c9834
commit 94c2517d67
3 changed files with 18 additions and 6 deletions

View file

@ -32,7 +32,6 @@ namespace MWGui
, mHairIndex(0) , mHairIndex(0)
, mCurrentAngle(0) , mCurrentAngle(0)
, mPreviewDirty(true) , mPreviewDirty(true)
, mPreview(NULL)
{ {
// Centre dialog // Centre dialog
center(); center();
@ -115,7 +114,14 @@ namespace MWGui
updateSkills(); updateSkills();
updateSpellPowers(); updateSpellPowers();
mPreview = new MWRender::RaceSelectionPreview(); mPreview.reset(NULL);
mPreviewImage->setImageTexture("");
const std::string textureName = "CharacterHeadPreview";
MyGUI::RenderManager::getInstance().destroyTexture(MyGUI::RenderManager::getInstance().getTexture(textureName));
mPreview.reset(new MWRender::RaceSelectionPreview());
mPreview->setup(); mPreview->setup();
mPreview->update (0); mPreview->update (0);
@ -129,7 +135,7 @@ namespace MWGui
index = proto.mHair.substr(proto.mHair.size() - 2, 2); index = proto.mHair.substr(proto.mHair.size() - 2, 2);
mHairIndex = boost::lexical_cast<int>(index) - 1; mHairIndex = boost::lexical_cast<int>(index) - 1;
mPreviewImage->setImageTexture ("CharacterHeadPreview"); mPreviewImage->setImageTexture (textureName);
mPreviewDirty = true; mPreviewDirty = true;
} }
@ -157,8 +163,7 @@ namespace MWGui
void RaceDialog::close() void RaceDialog::close()
{ {
delete mPreview; mPreview.reset(NULL);
mPreview = 0;
} }
// widget controls // widget controls
@ -306,6 +311,10 @@ namespace MWGui
void RaceDialog::doRenderUpdate() void RaceDialog::doRenderUpdate()
{ {
if (!mPreview.get())
return;
mPreview->onFrame();
if (mPreviewDirty) if (mPreviewDirty)
{ {
mPreview->render(); mPreview->render();

View file

@ -100,7 +100,7 @@ namespace MWGui
float mCurrentAngle; float mCurrentAngle;
MWRender::RaceSelectionPreview* mPreview; std::auto_ptr<MWRender::RaceSelectionPreview> mPreview;
bool mPreviewDirty; bool mPreviewDirty;
}; };

View file

@ -298,6 +298,9 @@ namespace MWRender
void RaceSelectionPreview::render() void RaceSelectionPreview::render()
{ {
mTexture->load(); mTexture->load();
if (!mRenderTarget)
setupRenderTarget();
mRenderTarget->update(); mRenderTarget->update();
} }