@@ -67,6 +67,17 @@ CAdditionalVertexStreamManager::CAdditionalVertexStreamManager()
6767// /////////////////////////////////////////////////////////////
6868CAdditionalVertexStreamManager::~CAdditionalVertexStreamManager ()
6969{
70+ SAFE_RELEASE (m_pOldVertexDeclaration);
71+
72+ for (std::map<void *, SAdditionalStreamInfo>::iterator iter = m_AdditionalStreamInfoMap.begin (); iter != m_AdditionalStreamInfoMap.end (); ++iter)
73+ {
74+ SAdditionalStreamInfo& info = iter->second ;
75+ SAFE_RELEASE (info.pStreamData );
76+ SAFE_RELEASE (info.pVertexDeclaration );
77+ }
78+
79+ m_AdditionalStreamInfoMap.clear ();
80+ m_pDevice = NULL ;
7081}
7182
7283// /////////////////////////////////////////////////////////////
@@ -83,6 +94,20 @@ CAdditionalVertexStreamManager* CAdditionalVertexStreamManager::GetSingleton()
8394 return ms_Singleton;
8495}
8596
97+ CAdditionalVertexStreamManager* CAdditionalVertexStreamManager::GetExistingSingleton ()
98+ {
99+ return ms_Singleton;
100+ }
101+
102+ void CAdditionalVertexStreamManager::DestroySingleton ()
103+ {
104+ if (ms_Singleton)
105+ {
106+ delete ms_Singleton;
107+ ms_Singleton = NULL ;
108+ }
109+ }
110+
86111// /////////////////////////////////////////////////////////////
87112//
88113// CAdditionalVertexStreamManager::OnDeviceCreate
@@ -105,6 +130,9 @@ void CAdditionalVertexStreamManager::OnDeviceCreate(IDirect3DDevice9* pDevice)
105130bool CAdditionalVertexStreamManager::MaybeSetAdditionalVertexStream (D3DPRIMITIVETYPE PrimitiveType, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices,
106131 UINT startIndex, UINT primCount)
107132{
133+ if (!m_pDevice)
134+ return false ;
135+
108136 // Cache info
109137 SCurrentStateInfo state;
110138
@@ -188,6 +216,9 @@ void CAdditionalVertexStreamManager::SetAdditionalVertexStream(SCurrentStateInfo
188216// /////////////////////////////////////////////////////////////
189217void CAdditionalVertexStreamManager::MaybeUnsetAdditionalVertexStream ()
190218{
219+ if (!m_pDevice)
220+ return ;
221+
191222 HRESULT hr;
192223 if (m_pOldVertexDeclaration)
193224 {
@@ -360,6 +391,9 @@ bool CAdditionalVertexStreamManager::UpdateAdditionalStreamContent(SCurrentState
360391// ///////////////////////////////////////////////////////////
361392bool CAdditionalVertexStreamManager::UpdateCurrentStateInfo (SCurrentStateInfo& state)
362393{
394+ if (!m_pDevice)
395+ return false ;
396+
363397 // Get vertex declaration
364398 if (FAILED (m_pDevice->GetVertexDeclaration (&state.decl .pVertexDeclaration )))
365399 return false ;
@@ -466,13 +500,16 @@ SAdditionalStreamInfo* CAdditionalVertexStreamManager::CreateAdditionalStreamInf
466500 declNew->Usage = D3DDECLUSAGE_NORMAL;
467501 declNew->UsageIndex = 0 ;
468502 if (FAILED (m_pDevice->CreateVertexDeclaration (elements, &info.pVertexDeclaration )))
469- return false ;
503+ return nullptr ;
470504
471505 // Create new stream
472506 info.Stride = sizeof (float ) * 3 ;
473507 UINT Size2 = ConvertPTSize (state.decl .VertexBufferDesc1 .Size );
474508 if (FAILED (m_pDevice->CreateVertexBuffer (Size2, D3DUSAGE_WRITEONLY, 0 , D3DPOOL_MANAGED, &info.pStreamData , NULL )))
475- return false ;
509+ {
510+ SAFE_RELEASE (info.pVertexDeclaration );
511+ return nullptr ;
512+ }
476513
477514 // Save info
478515 MapSet (m_AdditionalStreamInfoMap, state.stream1 .pStreamData , info);
@@ -515,3 +552,4 @@ void CAdditionalVertexStreamManager::OnVertexBufferRangeInvalidated(IDirect3DVer
515552 pAdditionalInfo->ConvertedRanges .UnsetRange (Offset, Size);
516553 }
517554}
555+
0 commit comments