82{
84
85 auto pTerrain = ATerrainInterface::GetSingleton();
86
88 {
89 const TCHAR** ppLODNames;
92
93 if ( iNumLODs == 0 && m_szCollisionFilename[ 0 ] == '\0' )
94 {
98 }
99 else
100 {
101 ATerrainLODBlock** ppLODBlocks;
103 GetLODBlocks( a_eLODType, ppLODBlocks, uiNumMemBlocks );
104
106
107 for (
TINT i = 0; i < uiNumMemBlocks; i++ )
108 {
109 if ( ppLODBlocks[ i ] ==
TNULL )
110 {
111 ppLODBlocks[ i ] = pTerrain->AllocateLODBlock( a_eLODType, this );
112
113 if ( ppLODBlocks[ i ] ==
TNULL )
114 {
116 return;
117 }
118
119 ppLODBlocks[ i ]->m_bIsUnused =
TFALSE;
120 }
121 }
122
124 {
126 }
127
129
130 for (
TINT i = 0; i < iNumLODs; i++ )
131 {
132 if ( m_ppLODModelsData[ a_eLODType ][ i ] ==
TNULL )
133 {
134 auto pBlock = ppLODBlocks[ pLODToBlock[ i ] ];
135 auto pModelData =
new ( pBlock->GetMemBlock() )
ModelNode();
136
137 auto pTRB = new ( pBlock->GetMemBlock() ) TTRB();
138 pBlock->SetupTRB( pTRB, pBlock );
139 m_ppLODModelsData[ a_eLODType ][ i ] = pModelData;
140
141 auto pModelLoaderJob = pTerrain->GetFreeModelLoaderJob();
142 pModelLoaderJob->InitJob(
143 &pModelData->m_ModelRef,
144 pTRB,
145 ppLODNames[ i ],
147 );
148
149 AAssetStreaming::GetSingleton()->AddMainThreadJob( pModelLoaderJob );
150 }
151 }
152
153 auto pSectionJob = pTerrain->GetFreeSectionLoaderJob();
154 pSectionJob->InitJob( this, a_eLODType );
155
156 AAssetStreaming::GetSingleton()->AddMainThreadJob( pSectionJob );
157
160 }
161 }
162}
void LoadMatlib(ATerrainLODType a_eLODType)
void GetLODNames(ATerrainLODType a_eLODType, const TCHAR **&a_rLODs, TINT &a_rNumLODs)
void SetLODLoaded(ATerrainLODType a_eLODType, TBOOL a_bLoaded)
void SetLODQueued(ATerrainLODType a_eLODType, TBOOL a_bQueued)
TBOOL IsLODLoading(ATerrainLODType a_eLODType) const
void SetLODLoading(ATerrainLODType a_eLODType, TBOOL a_bLoading)
void GetLODBlocks(ATerrainLODType a_eLODType, ATerrainLODBlock **&a_rMemBlocks, TUINT16 &a_rNumMemBlocks)