From 94c2517d6713982c008801bd728b6ce062f7bf5f Mon Sep 17 00:00:00 2001 From: scrawl Date: Wed, 13 Aug 2014 19:30:46 +0200 Subject: [PATCH] Fix race preview crash (Fixes #1808) --- apps/openmw/mwgui/race.cpp | 19 ++++++++++++++----- apps/openmw/mwgui/race.hpp | 2 +- apps/openmw/mwrender/characterpreview.cpp | 3 +++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwgui/race.cpp b/apps/openmw/mwgui/race.cpp index 499c1e191..a51250c9d 100644 --- a/apps/openmw/mwgui/race.cpp +++ b/apps/openmw/mwgui/race.cpp @@ -32,7 +32,6 @@ namespace MWGui , mHairIndex(0) , mCurrentAngle(0) , mPreviewDirty(true) - , mPreview(NULL) { // Centre dialog center(); @@ -115,7 +114,14 @@ namespace MWGui updateSkills(); 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->update (0); @@ -129,7 +135,7 @@ namespace MWGui index = proto.mHair.substr(proto.mHair.size() - 2, 2); mHairIndex = boost::lexical_cast(index) - 1; - mPreviewImage->setImageTexture ("CharacterHeadPreview"); + mPreviewImage->setImageTexture (textureName); mPreviewDirty = true; } @@ -157,8 +163,7 @@ namespace MWGui void RaceDialog::close() { - delete mPreview; - mPreview = 0; + mPreview.reset(NULL); } // widget controls @@ -306,6 +311,10 @@ namespace MWGui void RaceDialog::doRenderUpdate() { + if (!mPreview.get()) + return; + + mPreview->onFrame(); if (mPreviewDirty) { mPreview->render(); diff --git a/apps/openmw/mwgui/race.hpp b/apps/openmw/mwgui/race.hpp index 340dcfa27..46c4c5ef4 100644 --- a/apps/openmw/mwgui/race.hpp +++ b/apps/openmw/mwgui/race.hpp @@ -100,7 +100,7 @@ namespace MWGui float mCurrentAngle; - MWRender::RaceSelectionPreview* mPreview; + std::auto_ptr mPreview; bool mPreviewDirty; }; diff --git a/apps/openmw/mwrender/characterpreview.cpp b/apps/openmw/mwrender/characterpreview.cpp index fd07f1a19..1af11996e 100644 --- a/apps/openmw/mwrender/characterpreview.cpp +++ b/apps/openmw/mwrender/characterpreview.cpp @@ -298,6 +298,9 @@ namespace MWRender void RaceSelectionPreview::render() { mTexture->load(); + + if (!mRenderTarget) + setupRenderTarget(); mRenderTarget->update(); }