Guest User

SpeedTree-memleak-fix.diff

a guest
Feb 20th, 2025
378
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. diff --git a/SpeedTreeLib/SpeedTreeForest.cpp b/SpeedTreeLib/SpeedTreeForest.cpp
  2. index b7342de..4e4ba5e 100644
  3. --- a/SpeedTreeLib/SpeedTreeForest.cpp
  4. +++ b/SpeedTreeLib/SpeedTreeForest.cpp
  5. @@ -84,6 +84,10 @@ BOOL CSpeedTreeForest::GetMainTree(DWORD dwCRC, CSpeedTreeWrapper ** ppMainTree,
  6.  
  7. pTree = new CSpeedTreeWrapper;
  8.  
  9. + // For main tree instance explicitely make CSpeedTreeRT object
  10. + // for instances it's "instanced" from main tree in "MakeInstance"
  11. + pTree->MakeSpeedTree();
  12. +
  13. if (!pTree->LoadTree(c_pszFileName, (const BYTE *) c_pvData, file.Size()))
  14. {
  15. delete pTree;
  16. diff --git a/SpeedTreeLib/SpeedTreeWrapper.cpp b/SpeedTreeLib/SpeedTreeWrapper.cpp
  17. index 87eb836..3ca6016 100644
  18. --- a/SpeedTreeLib/SpeedTreeWrapper.cpp
  19. +++ b/SpeedTreeLib/SpeedTreeWrapper.cpp
  20. @@ -57,7 +57,7 @@ bool CSpeedTreeWrapper::ms_bSelfShadowOn = true;
  21. ///////////////////////////////////////////////////////////////////////
  22. // CSpeedTreeWrapper::CSpeedTreeWrapper
  23. CSpeedTreeWrapper::CSpeedTreeWrapper() :
  24. -m_pSpeedTree(new CSpeedTreeRT),
  25. +m_pSpeedTree(nullptr),
  26. m_bIsInstance(false),
  27. m_pInstanceOf(NULL),
  28. m_pGeometryCache(NULL),
  29. @@ -73,12 +73,28 @@ m_pLeavesUpdatedByCpu(NULL),
  30. m_unBranchVertexCount(0),
  31. m_unFrondVertexCount(0),
  32. m_pTextureInfo(NULL)
  33. +{
  34. + Initialize();
  35. +}
  36. +
  37. +void CSpeedTreeWrapper::Initialize()
  38. {
  39. // set initial position
  40. m_afPos[0] = m_afPos[1] = m_afPos[2] = 0.0f;
  41. -
  42. - m_pSpeedTree->SetWindStrength(1.0f);
  43. - m_pSpeedTree->SetLocalMatrices(0, 4);
  44. +
  45. + if (m_pSpeedTree)
  46. + {
  47. + m_pSpeedTree->SetWindStrength(1.0f);
  48. + m_pSpeedTree->SetLocalMatrices(0, 4);
  49. + }
  50. +}
  51. +
  52. +void CSpeedTreeWrapper::MakeSpeedTree()
  53. +{
  54. + assert(m_pSpeedTree == nullptr);
  55. +
  56. + m_pSpeedTree = new CSpeedTreeRT;
  57. + Initialize();
  58. }
  59.  
  60. void CSpeedTreeWrapper::SetVertexShaders(DWORD dwBranchVertexShader, DWORD dwLeafVertexShader)
  61. diff --git a/SpeedTreeLib/SpeedTreeWrapper.h b/SpeedTreeLib/SpeedTreeWrapper.h
  62. index ea9e9ce..86ffa89 100644
  63. --- a/SpeedTreeLib/SpeedTreeWrapper.h
  64. +++ b/SpeedTreeLib/SpeedTreeWrapper.h
  65. @@ -97,6 +97,8 @@ public:
  66. public:
  67. CSpeedTreeWrapper();
  68. virtual ~CSpeedTreeWrapper();
  69. +
  70. + void Initialize();
  71.  
  72. const float * GetPosition();
  73. static void SetVertexShaders(DWORD dwBranchVertexShader, DWORD dwLeafVertexShader);
  74. @@ -128,6 +130,7 @@ public:
  75. CSpeedTreeWrapper * InstanceOf(void) const { return m_pInstanceOf; }
  76. CSpeedTreeWrapper * MakeInstance();
  77. void DeleteInstance(CSpeedTreeWrapper * pInstance);
  78. + void MakeSpeedTree();
  79. CSpeedTreeRT * GetSpeedTree(void) const { return m_pSpeedTree; }
  80.  
  81. // lighting
  82.  
Advertisement
Add Comment
Please, Sign In to add comment