Adam Johnson 11 years ago committed by Anne Marije v/d Meer
parent
commit
4cd2b2f7dd
  1. 23
      Sources/Plasma/FeatureLib/pfGameGUIMgr/pfGUIControlMod.cpp
  2. 13
      Sources/Plasma/PubUtilLib/plMessage/plDeviceRecreateMsg.h
  3. 6
      Sources/Plasma/PubUtilLib/plPipeline/DX/plDXPipeline.cpp

23
Sources/Plasma/FeatureLib/pfGameGUIMgr/pfGUIControlMod.cpp

@ -56,6 +56,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "pnMessage/plRefMsg.h" #include "pnMessage/plRefMsg.h"
#include "pnMessage/plEnableMsg.h" #include "pnMessage/plEnableMsg.h"
#include "pfMessage/pfGameGUIMsg.h" #include "pfMessage/pfGameGUIMsg.h"
#include "plMessage/plDeviceRecreateMsg.h"
#include "pnSceneObject/plDrawInterface.h" #include "pnSceneObject/plDrawInterface.h"
#include "pnSceneObject/plCoordinateInterface.h" #include "pnSceneObject/plCoordinateInterface.h"
#include "pnSceneObject/plAudioInterface.h" #include "pnSceneObject/plAudioInterface.h"
@ -572,14 +573,16 @@ plProfile_CreateTimer("Gui", "RenderSetup", GUITime);
bool pfGUIControlMod::MsgReceive( plMessage *msg ) bool pfGUIControlMod::MsgReceive( plMessage *msg )
{ {
plRenderMsg* rend = plRenderMsg::ConvertNoRef( msg ); plRenderMsg* rend = plRenderMsg::ConvertNoRef( msg );
plDeviceRecreateMsg* device = plDeviceRecreateMsg::ConvertNoRef(msg);
if (rend || device) {
plPipeline* pipe = rend ? rend->Pipeline() : device->Pipeline();
if( rend )
{
plProfile_BeginLap(GUITime, this->GetKey()->GetUoid().GetObjectName().c_str()); plProfile_BeginLap(GUITime, this->GetKey()->GetUoid().GetObjectName().c_str());
// Only need it once ISetUpDynTextMap(pipe);
if( ISetUpDynTextMap( rend->Pipeline() ) )
plgDispatch::Dispatch()->UnRegisterForExactType( plRenderMsg::Index(), GetKey() );
plProfile_EndLap(GUITime, this->GetKey()->GetUoid().GetObjectName().c_str()); plProfile_EndLap(GUITime, this->GetKey()->GetUoid().GetObjectName().c_str());
if (rend)
plgDispatch::Dispatch()->UnRegisterForExactType(plRenderMsg::Index(), GetKey());
return true; return true;
} }
@ -591,12 +594,16 @@ bool pfGUIControlMod::MsgReceive( plMessage *msg )
if( refMsg->GetContext() & ( plRefMsg::kOnCreate | plRefMsg::kOnRequest | plRefMsg::kOnReplace ) ) if( refMsg->GetContext() & ( plRefMsg::kOnCreate | plRefMsg::kOnRequest | plRefMsg::kOnReplace ) )
{ {
fDynTextMap = plDynamicTextMap::ConvertNoRef( refMsg->GetRef() ); fDynTextMap = plDynamicTextMap::ConvertNoRef( refMsg->GetRef() );
// Register for a render msg so we can leech the material when we finally
// have a pipeline to work with // These tell us when we need to (re-)initialize the DTM
plgDispatch::Dispatch()->RegisterForExactType( plRenderMsg::Index(), GetKey() ); plgDispatch::Dispatch()->RegisterForExactType( plRenderMsg::Index(), GetKey() );
plgDispatch::Dispatch()->RegisterForExactType( plDeviceRecreateMsg::Index(), GetKey() );
} }
else else
fDynTextMap = nil; {
fDynTextMap = nullptr;
plgDispatch::Dispatch()->UnRegisterForExactType( plDeviceRecreateMsg::Index(), GetKey() );
}
return true; return true;
} }
else if( refMsg->fType == kRefDynTextLayer ) else if( refMsg->fType == kRefDynTextLayer )

13
Sources/Plasma/PubUtilLib/plMessage/plDeviceRecreateMsg.h

@ -51,15 +51,26 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "pnMessage/plMessage.h" #include "pnMessage/plMessage.h"
class plPipeline;
class plDeviceRecreateMsg : public plMessage class plDeviceRecreateMsg : public plMessage
{ {
plPipeline* fPipe;
public: public:
plDeviceRecreateMsg() : plMessage( nil, nil, nil ) { SetBCastFlag( kBCastByExactType ); } plDeviceRecreateMsg(plPipeline* pipe=nullptr)
: plMessage(nullptr, nullptr, nullptr), fPipe(pipe)
{
SetBCastFlag(kBCastByExactType);
}
~plDeviceRecreateMsg() {} ~plDeviceRecreateMsg() {}
CLASSNAME_REGISTER( plDeviceRecreateMsg ); CLASSNAME_REGISTER( plDeviceRecreateMsg );
GETINTERFACE_ANY( plDeviceRecreateMsg, plMessage ); GETINTERFACE_ANY( plDeviceRecreateMsg, plMessage );
plPipeline* Pipeline() const { return fPipe; }
// IO // IO
void Read(hsStream* stream, hsResMgr* mgr) { plMessage::IMsgRead( stream, mgr ); } void Read(hsStream* stream, hsResMgr* mgr) { plMessage::IMsgRead( stream, mgr ); }
void Write(hsStream* stream, hsResMgr* mgr) { plMessage::IMsgWrite( stream, mgr ); } void Write(hsStream* stream, hsResMgr* mgr) { plMessage::IMsgWrite( stream, mgr ); }

6
Sources/Plasma/PubUtilLib/plPipeline/DX/plDXPipeline.cpp

@ -2264,7 +2264,7 @@ bool plDXPipeline::IResetDevice()
/// Broadcast a message letting everyone know that we were recreated and that /// Broadcast a message letting everyone know that we were recreated and that
/// all device-specific stuff needs to be recreated /// all device-specific stuff needs to be recreated
plDeviceRecreateMsg* clean = new plDeviceRecreateMsg(); plDeviceRecreateMsg* clean = new plDeviceRecreateMsg(this);
plgDispatch::MsgSend(clean); plgDispatch::MsgSend(clean);
} }
fDevWasLost = true; fDevWasLost = true;
@ -2533,7 +2533,7 @@ void plDXPipeline::Resize( uint32_t width, uint32_t height )
/// Broadcast a message letting everyone know that we were recreated and that /// Broadcast a message letting everyone know that we were recreated and that
/// all device-specific stuff needs to be recreated /// all device-specific stuff needs to be recreated
plDeviceRecreateMsg* clean = new plDeviceRecreateMsg(); plDeviceRecreateMsg* clean = new plDeviceRecreateMsg(this);
plgDispatch::MsgSend(clean); plgDispatch::MsgSend(clean);
} }
@ -3815,7 +3815,7 @@ bool plDXPipeline::BeginRender()
{ {
/// Broadcast a message letting everyone know that we were recreated and that /// Broadcast a message letting everyone know that we were recreated and that
/// all device-specific stuff needs to be recreated /// all device-specific stuff needs to be recreated
// plDeviceRecreateMsg* clean = new plDeviceRecreateMsg(); // plDeviceRecreateMsg* clean = new plDeviceRecreateMsg(this);
// plgDispatch::MsgSend(clean); // plgDispatch::MsgSend(clean);
fDevWasLost = false; fDevWasLost = false;

Loading…
Cancel
Save