OpenBarnyard
 
Loading...
Searching...
No Matches
ATerrainLODBlock.cpp
Go to the documentation of this file.
1#include "pch.h"
2#include "ATerrainLODBlock.h"
3#include "ATerrainSection.h"
4
5#include <Toshi/TSystem.h>
6#include <Toshi/TScheduler.h>
7
8//-----------------------------------------------------------------------------
9// Enables memory debugging.
10// Note: Should be the last include!
11//-----------------------------------------------------------------------------
12#include <Core/TMemoryDebugOn.h>
13
15
16ATerrainLODBlock::ATerrainLODBlock( TUINT a_uiHeapSize, const TCHAR* a_szName )
17{
18 m_pAllocatedSize = TNULL;
19 m_pUnk2 = 0;
20 m_pVISGroup = TNULL;
21 m_eLODType = ATerrainLODType_None;
22 m_fLastAccessTime = 0.0f;
23 m_uiHeapSize = a_uiHeapSize;
24 m_bIsUnused = TTRUE;
25
26 m_pCreatedMemBlock = g_pMemory->CreateMemBlock( m_uiHeapSize, a_szName, g_pMemory->GetGlobalBlock(), 0 );
27 m_Allocator.SetMemBlock( m_pCreatedMemBlock );
28}
29
31{
32 g_pMemory->DestroyMemBlock( m_pCreatedMemBlock );
33 m_pCreatedMemBlock = (TMemory::MemBlock*)1;
34 m_Allocator.SetMemBlock( TNULL );
35
36 static TUINT32 s_AllocatedSizeAfterDestroy = 0;
37 static TUINT32 s_Unk2AfterDestroy = 0;
38
39 m_pAllocatedSize = &s_AllocatedSizeAfterDestroy;
40 m_pUnk2 = &s_Unk2AfterDestroy;
41}
42
44{
45 Node::InsertAfter( a_pOther );
46 a_pTRB->SetMemoryFunctions(
47 []( TTRB::AllocType alloctype, TUINT32 size, TINT16 unk1, TUINT32 unk2, void* userData ) -> void* {
48 auto pBlock = TSTATICCAST( ATerrainLODBlock, userData );
49
50 if ( pBlock->m_pAllocatedSize )
51 {
52 *pBlock->m_pAllocatedSize += size;
53 }
54
55 return TMemalign( 128, size, pBlock->Next()->m_pCreatedMemBlock );
56 },
57 []( TTRB::AllocType alloctype, void* ptr, TINT16 unk1, TUINT32 unk2, void* userData ) {
58 TFree( ptr );
59 },
60 a_pOther
61 );
62}
63
65{
66 m_fLastAccessTime = g_oSystemManager.GetScheduler()->GetTotalTime();
67}
68
70{
71 if ( m_pVISGroup )
72 {
73 m_pVISGroup->DestroyLOD( m_eLODType );
74 m_pVISGroup = TNULL;
75 m_eLODType = ATerrainLODType_None;
76 }
77
78 m_fLastAccessTime = 0.0f;
79 m_pVISGroup = a_pVISGroup;
80 m_eLODType = a_eLODType;
81
82 if ( a_pVISGroup )
83 {
85 }
86 else
87 {
88 m_bIsUnused = TTRUE;
89 }
90}
void * TMemalign(TSIZE a_uiAlignment, TSIZE a_uiSize, Toshi::TMemory::MemBlock *a_pMemBlock)
Allocates aligned memory from a specific memory block.
Definition TMemory.cpp:1020
void TFree(void *a_pMem)
Frees previously allocated memory.
Definition TMemory.cpp:1054
#define TSTATICCAST(POINTERTYPE, VALUE)
Definition Defines.h:69
#define TOSHI_NAMESPACE_USING
Definition Defines.h:46
unsigned int TUINT
Definition Typedefs.h:8
int16_t TINT16
Definition Typedefs.h:14
char TCHAR
Definition Typedefs.h:20
#define TNULL
Definition Typedefs.h:23
uint32_t TUINT32
Definition Typedefs.h:13
#define TTRUE
Definition Typedefs.h:25
@ ATerrainLODType_None
TINT8 ATerrainLODType
TSystemManager g_oSystemManager
Definition TSystem.cpp:15
TMemory * g_pMemory
Definition TMemory.cpp:131
Represents a contiguous block of memory that can be allocated from.
Definition TMemory.h:101
Definition TTRB.h:253
void SetMemoryFunctions(t_MemoryFuncAlloc allocator, t_MemoryFuncDealloc deallocator, void *userdata)
Definition TTRB.cpp:311
TUINT8 AllocType
Definition TTRB.h:269
void SetupTRB(Toshi::TTRB *a_pTRB, ATerrainLODBlock *a_pOther)
friend class ATerrainSection
void Assign(ATerrainSection *a_pVISGroup, ATerrainLODType a_eLODType)
ATerrainLODBlock(TUINT a_uiHeapSize, const TCHAR *a_szName)