7#ifdef TOSHI_SKU_WINDOWS
25static TUINT s_iMeshIndex = 0;
26static TUINT s_iGrassMeshIndex = 0;
32void AModelLoader::InitialiseGrassLayersTextures()
35 "Data\\MiscTextures\\GrasslayertexWin.ttl",
55 auto pRenderGroup = a_pRenderGroup;
56 while ( !pRenderGroup->IsLeaf() )
58 LoadTreeIntersect( pRenderGroup->GetSubNode(), a_ppModel, a_pModelLOD );
59 pRenderGroup = pRenderGroup->m_pRight;
62 TASSERT( pRenderGroup->IsLeaf() );
63 auto pRenderData = pRenderGroup->GetLeafNode();
65 for (
TUINT i = 0; i < pRenderData->m_uiNumMeshes; i++ )
68 auto pMesh = pShader->CreateMesh(
TNULL );
70 pMesh->Create( 0, pTerrainMesh->uiNumVertices1 );
71 pTerrainMesh->
pMesh = pMesh;
73 if (
TNULL == s_pWorldMaterialClass )
75 s_pWorldMaterialClass =
TClass::Find(
"AWorldMaterial" );
81 a_pModelLOD->
ppMeshes[ s_iMeshIndex++ ] = pMesh;
83 auto pSubMesh = pMesh->GetSubMesh( 0 );
84 pSubMesh->pAssociatedMesh = pMesh;
87 if ( pSubMesh->pIndexPool ==
TNULL )
92 pSubMesh->pIndexPool = pIndexFactory->CreatePoolResource( pTerrainMesh->uiNumIndices, 9 );
95 pSubMesh->uiNumVertices = pTerrainMesh->uiNumVertices2;
98 if ( pTerrainMesh->uiNumVertices1 != 0 )
101 TBOOL bLocked = pMesh->Lock( lockBuffer );
105 TUtil::MemCopy( lockBuffer.apStreams[ 0 ], pTerrainMesh->pVertices,
sizeof(
WorldVertex ) * pTerrainMesh->uiNumVertices1 );
106 pMesh->Unlock( pTerrainMesh->uiNumVertices1 );
110 TASSERT( !
"Couldn't lock buffer" );
115 if ( pTerrainMesh->uiNumIndices != 0 )
120 pSubMesh->pIndexPool->Lock( &lockBuffer );
122 pSubMesh->pIndexPool->Unlock( pTerrainMesh->uiNumIndices );
127void AModelLoader::LoadWorldMeshTRB( Toshi::TModel* a_pModel,
TINT a_iLODIndex, Toshi::TModelLOD* a_pLOD, Toshi::TTMDWin::TRBLODHeader* a_pLODHeader )
135 auto pDatabase = a_pModel->CastSymbol<WorldDatabase>(
"Database" );
137 for (
TUINT i = 0; i < pDatabase->m_uiNumWorlds; i++ )
139 auto pWorld = pDatabase->m_ppWorlds[ i ];
141 for (
TINT k = 0; k < pWorld->m_iNumCells; k++ )
143 auto pModel = pWorld->m_ppCells[ k ];
144 LoadTreeIntersect( pModel->pTreeBranchNodes, pModel, a_pLOD );
155 auto pRenderGroup = a_pRenderGroup;
156 while ( !pRenderGroup->IsLeaf() )
158 LoadGrassTreeIntersect( pRenderGroup->GetSubNode(), a_ppModel, a_pModelLOD );
159 pRenderGroup = pRenderGroup->m_pRight;
162 TASSERT( pRenderGroup->IsLeaf() );
163 auto pRenderData = pRenderGroup->GetLeafNode();
165 for (
TUINT i = 0; i < pRenderData->m_uiNumMeshes; i++ )
172 pTerrainMesh->
pMesh = pMesh;
182 pMaterial->SetTextureNum( 1 );
185 pMesh->SetMaterial( pMaterial );
186 a_pModelLOD->
ppMeshes[ s_iGrassMeshIndex++ ] = pMesh;
192 if ( pSubMesh->pIndexPool ==
TNULL )
197 pSubMesh->pIndexPool = pIndexFactory->CreatePoolResource( pTerrainMesh->
uiNumIndices, 9 );
206 TBOOL bLocked = pMesh->
Lock( lockBuffer );
215 TASSERT( !
"Couldn't lock buffer" );
225 pSubMesh->pIndexPool->Lock( &lockBuffer );
227 pSubMesh->pIndexPool->Unlock( pTerrainMesh->
uiNumIndices );
232void AModelLoader::LoadGrassMeshTRB(
TModel* a_pModel,
TINT a_iLODIndex,
TModelLOD* a_pLOD, Toshi::TTMDWin::TRBLODHeader* a_pLODHeader )
239 s_iGrassMeshIndex = 0;
240 auto pDatabase = a_pModel->
CastSymbol<WorldDatabase>(
"Database" );
242 for (
TUINT i = 0; i < pDatabase->m_uiNumWorlds; i++ )
244 auto pWorld = pDatabase->m_ppWorlds[ i ];
246 for (
TINT k = 0; k < pWorld->m_iNumCells; k++ )
248 auto pModel = pWorld->m_ppCells[ k ];
249 LoadGrassTreeIntersect( pModel->pTreeBranchNodes, pModel, a_pLOD );
Rendering system interface for the Toshi engine.
#define TSTATICCAST(POINTERTYPE, VALUE)
#define TOSHI_NAMESPACE_USING
#define TPROFILER_SCOPE()
#define TDYNAMICCAST(T, OBJECT)
Toshi::T2Texture * g_aGrassLayers[7]
AMaterialLibrary * g_pGrassLayersMatLib
T * CastSymbol(const TCHAR *a_szSymbolName)
T * GetSystemResource(SYSRESOURCE systemResource)
static TClass * Find(const TCHAR *name, TClass *parent=TNULL)
static TFORCEINLINE TRenderInterface * GetSingleton()
static void * MemCopy(void *dst, const void *src, TSIZE size)
static Toshi::TTRB * GetAssetTRB(AAssetType a_eAssetType)
static Toshi::TMaterial * CreateMaterial(Toshi::TShader *a_pShader, const TCHAR *a_szMaterialName)
void CreateHAL(TUINT32 a_eFlags, TUINT16 a_uiMaxVertices, CellMeshSphere *a_pCellMeshSphere)
virtual TBOOL Create(BLENDMODE a_eBlendMode)
void SetTexture(TUINT a_uiStage, Toshi::TTexture *a_pTexture)
virtual TBOOL Lock(LockBuffer &a_rLockBuffer)
virtual void Unlock(TUINT32 a_uiNumVertices)
AWorldMesh::SubMesh * GetSubMesh(TUINT a_uiIndex)
Toshi::TVertexPoolResourceInterface::LockBuffer LockBuffer
CellMeshSphere ** ppCellMeshSpheres