@@ -24,15 +24,15 @@ class CEffectClonerImpl : public CEffectCloner
2424 CEffectClonerImpl ( CRenderItemManager* pManager );
2525 virtual ~CEffectClonerImpl ( void );
2626 virtual void DoPulse ( void );
27- virtual ID3DXEffect* CreateD3DEffect ( const SString& strFilename, const SString& strRootPath, SString& strOutStatus, bool & bOutUsesVertexShader, bool & bOutUsesDepthBuffer, bool bDebug );
28- virtual void ReleaseD3DEffect ( ID3DXEffect* pD3DEffect );
27+ virtual ID3DXEffect** CreateD3DEffect ( const SString& strFilename, const SString& strRootPath, SString& strOutStatus, bool & bOutUsesVertexShader, bool & bOutUsesDepthBuffer, bool bDebug );
28+ virtual void ReleaseD3DEffect ( ID3DXEffect** pD3DEffect );
2929
3030 // CEffectClonerImpl
3131 void MaybeTidyUp ( bool bForceDrasticMeasures = false , CEffectTemplate* pKeepThis = NULL );
3232
3333 CElapsedTime m_TidyupTimer;
3434 CRenderItemManager* m_pManager;
35- std::map < ID3DXEffect*, CEffectTemplate* > m_CloneMap;
35+ std::map < ID3DXEffect** , CEffectTemplate* > m_CloneMap;
3636 std::map < SString, CEffectTemplate* > m_ValidMap; // Active and files not changed since first created
3737 std::vector < CEffectTemplate* > m_OldList; // Active but files changed since first created
3838 uint m_uiCloneFailTotalCount;
@@ -84,7 +84,7 @@ CEffectClonerImpl::~CEffectClonerImpl ( void )
8484//
8585//
8686// //////////////////////////////////////////////////////////////
87- ID3DXEffect* CEffectClonerImpl::CreateD3DEffect ( const SString& strFilename, const SString& strRootPath, SString& strOutStatus, bool & bOutUsesVertexShader, bool & bOutUsesDepthBuffer, bool bDebug )
87+ ID3DXEffect** CEffectClonerImpl::CreateD3DEffect ( const SString& strFilename, const SString& strRootPath, SString& strOutStatus, bool & bOutUsesVertexShader, bool & bOutUsesDepthBuffer, bool bDebug )
8888{
8989 // Do we have a match with the initial path
9090 CEffectTemplate* pEffectTemplate = MapFindRef ( m_ValidMap, ConformPathForSorting ( strFilename ) );
@@ -134,7 +134,10 @@ ID3DXEffect* CEffectClonerImpl::CreateD3DEffect ( const SString& strFilename, co
134134 }
135135
136136 if ( !strReport.empty () )
137+ {
138+ strReport += SString ( " [effects cur:%d created:%d dest:%d]" , g_pDeviceState->MemoryState .Effect .iCurrentCount , g_pDeviceState->MemoryState .Effect .iCreatedCount , g_pDeviceState->MemoryState .Effect .iDestroyedCount );
137139 AddReportLog ( 7544 , SString ( " NewEffectTemplate (call:%d) %s %s" , uiCallCount, *strReport, *strFilename ) );
140+ }
138141 if ( !pEffectTemplate )
139142 return NULL ;
140143 }
@@ -206,11 +209,14 @@ ID3DXEffect* CEffectClonerImpl::CreateD3DEffect ( const SString& strFilename, co
206209 }
207210 m_uiCloneSuccessTotalCount++;
208211
212+ ID3DXEffect** ppNewD3DEffect = new ID3DXEffect*;
213+ *ppNewD3DEffect = pNewD3DEffect;
214+
209215 // Cross ref clone with original
210- MapSet ( m_CloneMap, pNewD3DEffect , pEffectTemplate );
216+ MapSet ( m_CloneMap, ppNewD3DEffect , pEffectTemplate );
211217
212218 // Return result
213- return pNewD3DEffect ;
219+ return ppNewD3DEffect ;
214220}
215221
216222
@@ -221,15 +227,17 @@ ID3DXEffect* CEffectClonerImpl::CreateD3DEffect ( const SString& strFilename, co
221227// Remove all refs to the d3d effect
222228//
223229// //////////////////////////////////////////////////////////////
224- void CEffectClonerImpl::ReleaseD3DEffect ( ID3DXEffect* pD3DEffect )
230+ void CEffectClonerImpl::ReleaseD3DEffect ( ID3DXEffect** ppD3DEffect )
225231{
226232 // Find pEffectTemplate from which this d3d effect was cloned from
227- CEffectTemplate* pEffectTemplate = MapFindRef ( m_CloneMap, pD3DEffect );
233+ CEffectTemplate* pEffectTemplate = MapFindRef ( m_CloneMap, ppD3DEffect );
228234 assert ( pEffectTemplate );
229235
230236 // Remove from clone map
231- MapRemove ( m_CloneMap, pD3DEffect );
237+ MapRemove ( m_CloneMap, ppD3DEffect );
232238
239+ ID3DXEffect* pD3DEffect = *ppD3DEffect;
240+ delete ppD3DEffect;
233241 // Remove from pEffectTemplate. This will alse release the d3d effect.
234242 pEffectTemplate->UnCloneD3DEffect ( pD3DEffect );
235243}
0 commit comments