OpenBarnyard
 
Loading...
Searching...
No Matches
AMaterialLibraryManager Class Reference

#include <AMaterialLibraryManager.h>

Inheritance diagram for AMaterialLibraryManager:

Classes

class  List
 
class  TextureSlot
 

Public Types

using ThisClass = AMaterialLibraryManager
 
using BaseClass = Toshi::TObject
 
using LibrariesMap = Toshi::T2Map<Toshi::TPString8, AMaterialLibrary*, Toshi::TPString8::Comparator>
 

Public Member Functions

virtual Toshi::TClass * GetClass () override
 
 AMaterialLibraryManager ()
 
void LoadLibrariesFromProperties (const PBPropertyValue *a_pProperty, Toshi::TTRB *a_pTRB, TBOOL a_bUpdateGUIMaterials)
 
void LoadLibrary (const Toshi::TPString8 &a_rLibName, Toshi::TTRB *a_pTRB, TBOOL a_bIsGUI)
 
void UnloadLibrary (const Toshi::TPString8 &a_rLibName, TBOOL a_bUnused)
 
void CreateTextures (AMaterialLibrary *a_pMatLibrary)
 
void OnLibraryLoaded (TBOOL a_bIsGUI)
 
Toshi::TTexture * FindTexture (const TCHAR *a_szTextureName)
 
TINT GetNumUsedTextures () const
 
TINT GetNumFreeTextures () const
 
void UnloadTexturesOfLibrary (AMaterialLibrary *a_pMaterialLibrary)
 

Static Public Member Functions

static Toshi::TObject * CreateTObject ()
 
static Toshi::TObject * CreateTObjectInPlace (void *a_pPtr)
 
static void InitialiseClass ()
 
static void DeinitialiseClass ()
 
static __forceinline Toshi::TClass * GetClassStatic ()
 

Static Public Attributes

static constexpr Toshi::TClass * PARENTCLASS = & Toshi::TObject::ms_oClass
 
static Toshi::TClass ms_oClass = Toshi::TClass( "AMaterialLibraryManager", AMaterialLibraryManager::PARENTCLASS, AMaterialLibraryManager::CreateTObject, AMaterialLibraryManager::CreateTObjectInPlace, AMaterialLibraryManager::InitialiseClass, AMaterialLibraryManager::DeinitialiseClass, 0, 1, sizeof( AMaterialLibraryManager ), alignof( AMaterialLibraryManager ) )
 
static constexpr TUINT MAX_NUM_TEXTURES = 600
 

Detailed Description

Definition at line 10 of file AMaterialLibraryManager.h.

Member Typedef Documentation

◆ BaseClass

using AMaterialLibraryManager::BaseClass = Toshi::TObject

Definition at line 15 of file AMaterialLibraryManager.h.

◆ LibrariesMap

using AMaterialLibraryManager::LibrariesMap = Toshi::T2Map<Toshi::TPString8, AMaterialLibrary*, Toshi::TPString8::Comparator>

Definition at line 77 of file AMaterialLibraryManager.h.

◆ ThisClass

Constructor & Destructor Documentation

◆ AMaterialLibraryManager()

AMaterialLibraryManager::AMaterialLibraryManager ( )

Definition at line 21 of file AMaterialLibraryManager.cpp.

22 : m_NumRefLibraries( AMemory::GetAllocator( AMemory::POOL_Misc ) ), m_LoadedLibraries( AMemory::GetAllocator( AMemory::POOL_Misc ) )
23{
24 List::CreateSingleton();
25
26 m_iNumUsedTextures = 0;
27 m_iNumFreeTextures = 0;
28
29 for ( TUINT i = 0; i < MAX_NUM_TEXTURES; i++ )
30 {
31 m_FreeTextures.PushFront( &m_aSlots[ i ] );
32 m_iNumFreeTextures++;
33 }
34}
unsigned int TUINT
Definition Typedefs.h:8
static constexpr TUINT MAX_NUM_TEXTURES
@ POOL_Misc
Definition AMemory.h:35
static Toshi::T2Allocator * GetAllocator(POOL a_ePool)
Definition AMemory.cpp:31

Member Function Documentation

◆ CreateTextures()

void AMaterialLibraryManager::CreateTextures ( AMaterialLibrary * a_pMatLibrary)

Definition at line 221 of file AMaterialLibraryManager.cpp.

222{
223 auto pTextureFactory = TRenderInterface::GetSingleton()->GetSystemResource<TTextureFactory>( SYSRESOURCE_TEXTUREFACTORY );
224
225 for ( TINT i = 0; i < a_pMatLibrary->GetNumTextures(); i++ )
226 {
227 auto pMatlibTexture = a_pMatLibrary->GetTexture( i );
228
229 auto pTexSlot = m_FreeTextures.PopFront();
230 m_iNumFreeTextures -= 1;
231
232 pTexSlot->SetName( pMatlibTexture->Name );
233 pTexSlot->SetLibrary( a_pMatLibrary );
234 pTexSlot->SetTexture( pTextureFactory->CreateFromT2Texture( pMatlibTexture->pTexture ) );
235
236 m_UsedTextures.PushFront( pTexSlot );
237 m_iNumUsedTextures += 1;
238 }
239}
@ SYSRESOURCE_TEXTUREFACTORY
Definition TRender.h:20
int TINT
Definition Typedefs.h:7
T * GetSystemResource(SYSRESOURCE systemResource)
static TFORCEINLINE TRenderInterface * GetSingleton()
Definition TSingleton.h:49
ATexture * GetTexture(TINT a_uiIndex)
TINT GetNumTextures() const

◆ CreateTObject()

Toshi::TObject * AMaterialLibraryManager::CreateTObject ( )
static

Definition at line 19 of file AMaterialLibraryManager.cpp.

◆ CreateTObjectInPlace()

Toshi::TObject * AMaterialLibraryManager::CreateTObjectInPlace ( void * a_pPtr)
static

Definition at line 19 of file AMaterialLibraryManager.cpp.

◆ DeinitialiseClass()

void AMaterialLibraryManager::DeinitialiseClass ( )
static

Definition at line 19 of file AMaterialLibraryManager.cpp.

◆ FindTexture()

TTexture * AMaterialLibraryManager::FindTexture ( const TCHAR * a_szTextureName)

Definition at line 252 of file AMaterialLibraryManager.cpp.

253{
254 for ( auto it = m_UsedTextures.Begin(); it != m_UsedTextures.End(); it = it->Next() )
255 {
256 if ( TStringManager::String8CompareNoCase( it->GetName(), a_szTextureName ) == 0 )
257 {
258 return it->GetTexture();
259 }
260 }
261
262 return TNULL;
263}
#define TNULL
Definition Typedefs.h:23
static TINT String8CompareNoCase(const TCHAR *str1, const TCHAR *str2, TSIZE size=-1)

◆ GetClass()

Toshi::TClass * AMaterialLibraryManager::GetClass ( )
overridevirtual

Definition at line 19 of file AMaterialLibraryManager.cpp.

◆ GetClassStatic()

static __forceinline Toshi::TClass * AMaterialLibraryManager::GetClassStatic ( )
inlinestatic

Definition at line 15 of file AMaterialLibraryManager.h.

◆ GetNumFreeTextures()

TINT AMaterialLibraryManager::GetNumFreeTextures ( ) const
inline

Definition at line 93 of file AMaterialLibraryManager.h.

93{ return m_iNumFreeTextures; }

◆ GetNumUsedTextures()

TINT AMaterialLibraryManager::GetNumUsedTextures ( ) const
inline

Definition at line 92 of file AMaterialLibraryManager.h.

92{ return m_iNumUsedTextures; }

◆ InitialiseClass()

void AMaterialLibraryManager::InitialiseClass ( )
static

Definition at line 19 of file AMaterialLibraryManager.cpp.

◆ LoadLibrariesFromProperties()

void AMaterialLibraryManager::LoadLibrariesFromProperties ( const PBPropertyValue * a_pProperty,
Toshi::TTRB * a_pTRB,
TBOOL a_bUpdateGUIMaterials )

Definition at line 36 of file AMaterialLibraryManager.cpp.

37{
38 if ( a_pProperty )
39 {
40 auto pArray = a_pProperty->GetArray();
41
42 for ( TUINT i = 0; i < pArray->GetSize(); i++ )
43 {
44 auto matlibName = pArray->GetValue( i )->GetTPString8();
45 auto eLangId = ALocaleManager::GetSingleton()->GetLanguage();
46
47 TBOOL bLocaliseAsset;
48
50 {
51 bLocaliseAsset = TFALSE;
52 }
53 else
54 {
55 bLocaliseAsset = TPString8( "gui_loc" ) == matlibName;
56 }
57
58 if ( bLocaliseAsset )
59 {
60 TString8 localisedAssetName = matlibName.GetString8();
61 localisedAssetName += "_";
62 localisedAssetName += ALocaleManager::Interface()->GetCurrentLanguageName();
63 localisedAssetName.MakeLower();
64
65 matlibName = TPString8( localisedAssetName );
66 }
67
68 LoadLibrary( matlibName, a_pTRB, TFALSE );
69 g_oLoadScreen.Update( 1.0f, TTRUE );
70 }
71
74
75 if ( a_bUpdateGUIMaterials && AGUISystem::GetSingleton() )
76 {
78 }
79
80 g_oLoadScreen.Update( 1.0f, TTRUE );
81 }
82}
#define TFALSE
Definition Typedefs.h:24
#define TTRUE
Definition Typedefs.h:25
bool TBOOL
Definition Typedefs.h:6
ALoadScreen g_oLoadScreen
const class PBPropertyValueArray * GetArray() const
TString8 & MakeLower()
Definition TString8.h:87
void Update(TFLOAT a_fDeltaTime=1.0f, TBOOL a_bRender=true)
void LoadLibrary(const Toshi::TPString8 &a_rLibName, Toshi::TTRB *a_pTRB, TBOOL a_bIsGUI)
static ALocaleManager * Interface()
const TCHAR * GetCurrentLanguageName()

◆ LoadLibrary()

void AMaterialLibraryManager::LoadLibrary ( const Toshi::TPString8 & a_rLibName,
Toshi::TTRB * a_pTRB,
TBOOL a_bIsGUI )

Definition at line 84 of file AMaterialLibraryManager.cpp.

85{
86 auto pRenderer = TRenderInterface::GetSingleton();
87
88 if ( !m_LoadedLibraries.IsValid( m_LoadedLibraries.Find( a_rLibName ) ) )
89 {
90 TString8 fileMiddle = "";
91 TString8 fileFormat = "";
92
93 if ( !pRenderer->Supports32BitTextures() )
94 {
95 fileFormat = "16";
96 }
97
98 TCHAR matlibPath[ 128 ];
100 matlibPath,
101 sizeof( matlibPath ),
102 "data/matlibs/%s%s%s.ttl",
103 a_rLibName.GetPooledString()->GetString8().GetString(),
104 fileMiddle.GetString(),
105 fileFormat.GetString()
106 );
107
108 AMaterialLibrary* pLibrary = List::GetSingleton()->CreateLibraryFromAsset( matlibPath, a_pTRB );
109
110 if ( pLibrary )
111 {
112 m_LoadedLibraries.Insert( a_rLibName, pLibrary );
113 CreateTextures( pLibrary );
114 m_NumRefLibraries.Insert( a_rLibName, 1 );
115
116 if ( a_rLibName.GetString8().Find( "gui_" ) == 0 )
117 {
118 a_bIsGUI = TTRUE;
119 }
120
121 OnLibraryLoaded( a_bIsGUI );
122 }
123 }
124 else
125 {
126 auto pRefCount = m_NumRefLibraries.Find( a_rLibName );
127 pRefCount->GetSecond() += 1;
128 }
129}
char TCHAR
Definition Typedefs.h:20
const TCHAR * GetString(TINT a_iIndex=0) const
Definition TString8.cpp:286
static void String8Format(TCHAR *str, TINT size, const TCHAR *format,...)
void CreateTextures(AMaterialLibrary *a_pMatLibrary)

◆ OnLibraryLoaded()

void AMaterialLibraryManager::OnLibraryLoaded ( TBOOL a_bIsGUI)

Definition at line 241 of file AMaterialLibraryManager.cpp.

242{
245
246 if ( a_bUpdateGUIMaterials && AGUISystem::GetSingleton() )
247 {
249 }
250}

◆ UnloadLibrary()

void AMaterialLibraryManager::UnloadLibrary ( const Toshi::TPString8 & a_rLibName,
TBOOL a_bUnused )

Definition at line 131 of file AMaterialLibraryManager.cpp.

132{
133 TPString8 matlibName = a_rLibName;
134 auto eLangId = ALocaleManager::GetSingleton()->GetLanguage();
135
136 TBOOL bLocaliseAsset;
137
139 {
140 bLocaliseAsset = TFALSE;
141 }
142 else
143 {
144 bLocaliseAsset = TPString8( "gui_loc" ) == matlibName;
145 }
146
147 if ( bLocaliseAsset )
148 {
149 TString8 localisedAssetName = matlibName.GetString8();
150 localisedAssetName += "_";
151 localisedAssetName += ALocaleManager::Interface()->GetCurrentLanguageName();
152 localisedAssetName.MakeLower();
153
154 matlibName = TPString8( localisedAssetName );
155 }
156
158
159 auto pMatlibNode = m_LoadedLibraries.Find( matlibName );
160
161 if ( pMatlibNode != m_LoadedLibraries.End() )
162 {
163 auto pRefCountNode = m_NumRefLibraries.Find( matlibName );
164
165 if ( m_NumRefLibraries.IsValid( pRefCountNode ) )
166 {
167 pRefCountNode->GetSecond() -= 1;
168
169 if ( pRefCountNode->GetSecond() == 0 )
170 {
171 DestroyLibrary( pMatlibNode, a_bUnused );
172 m_NumRefLibraries.Remove( pRefCountNode );
173 }
174 }
175 }
176}
TFORCEINLINE const TString8 & GetString8() const
Definition TPString8.h:172

◆ UnloadTexturesOfLibrary()

void AMaterialLibraryManager::UnloadTexturesOfLibrary ( AMaterialLibrary * a_pMaterialLibrary)

Definition at line 195 of file AMaterialLibraryManager.cpp.

196{
197 for ( auto it = m_UsedTextures.Begin(); it != m_UsedTextures.End(); )
198 {
199 auto pNextNode = it->Next();
200
201 if ( it->GetLibrary() == a_pMaterialLibrary )
202 {
203 auto removedSlot = m_UsedTextures.Erase( it );
204 m_iNumUsedTextures -= 1;
205
206 removedSlot->GetTexture()->DestroyResource();
207 removedSlot->SetTexture( TNULL );
208 removedSlot->ResetName();
209
210 m_FreeTextures.PushFront( removedSlot );
211 m_iNumFreeTextures += 1;
212 }
213
214 it = it->Next();
215 }
216
218 TTODO( "FUN_006120e0" );
219}
#define TTODO(DESC)
Definition Defines.h:134

Member Data Documentation

◆ MAX_NUM_TEXTURES

TUINT AMaterialLibraryManager::MAX_NUM_TEXTURES = 600
staticconstexpr

Definition at line 79 of file AMaterialLibraryManager.h.

◆ ms_oClass

◆ PARENTCLASS

Toshi::TClass* AMaterialLibraryManager::PARENTCLASS = & Toshi::TObject::ms_oClass
staticconstexpr

Definition at line 15 of file AMaterialLibraryManager.h.


The documentation for this class was generated from the following files: