@@ -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 ;
@@ -472,7 +506,10 @@ SAdditionalStreamInfo* CAdditionalVertexStreamManager::CreateAdditionalStreamInf
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 )))
509+ {
510+ SAFE_RELEASE (info.pVertexDeclaration );
475511 return nullptr ;
512+ }
476513
477514 // Save info
478515 MapSet (m_AdditionalStreamInfoMap, state.stream1 .pStreamData , info);
0 commit comments