OpenBarnyard
 
Loading...
Searching...
No Matches
AGUIMatlibPicture.cpp
Go to the documentation of this file.
1#include "pch.h"
2#include "AGUIMatlibPicture.h"
3#include "AGUI2.h"
6
9
10//-----------------------------------------------------------------------------
11// Enables memory debugging.
12// Note: Should be the last include!
13//-----------------------------------------------------------------------------
14#include <Core/TMemoryDebugOn.h>
15
17
19
21{
22 if ( m_iNumRects1 != 0 )
23 {
24 if ( m_pImages != TNULL )
25 {
26 for ( TINT i = 0; i < m_iNumRects2; i++ )
27 {
28 if ( m_pImages[ i ].pTexture )
29 {
30 m_pImages[ i ].pTexture->DestroyResource();
31 m_pImages[ i ].pTexture = TNULL;
32 }
33
34 AGUI2::GetRenderer()->DestroyMaterial( m_pImages[ i ].pMaterial );
35 m_pImages[ i ].pMaterial = TNULL;
36 }
37
38 delete[] m_pImages;
40
41 m_iNumRects2 = 0;
42 delete[] m_pRectangles;
44
45 m_iNumRects1 = 0;
46 UnloadMatLib();
48 }
49 }
50}
51
53{
55
56 if ( m_iNumRects1 < 1 )
57 {
58 if ( !m_Name.IsEmpty() )
59 {
60 m_iNumRects1 = 6;
61 m_pRectangles = new Rectangle[ 6 ];
62
63 m_iNumRects2 = 6;
64 m_pImages = new Image[ 6 ];
65 LoadMatLib();
66
68
69 for ( TINT i = 0; i < m_iNumRects2; i++ )
70 {
71 TString8 texName;
72 texName.Format( "%s_%d.tga", m_Name.GetString8().GetString(), i + 1 );
73
74 auto iTexIndex = m_pMaterialLibrary->FindTextureIndex( texName );
75 auto pTexture = pTexFactory->CreateFromT2Texture( m_pMaterialLibrary->GetTexture( iTexIndex )->pTexture );
76
77 m_pImages[ i ].pTexture = pTexture;
78 m_pImages[ i ].pMaterial = AGUI2::GetRenderer()->CreateMaterial( pTexture );
79 m_pImages[ i ].pMaterial->SetBlendState( 0 );
80 m_pImages[ i ].pMaterial->SetTextureAddress( 1 );
81 }
82
83 for ( TINT i = 0; i < m_iNumRects1; i++ )
84 {
85 auto pRect = &m_pRectangles[ i ];
86 pRect->ppMaterial = &m_pImages[ AGUIPicture::split_rules[ i ].iImageIndex ].pMaterial;
87
88 ( pRect->Pos1 ).y = AGUIPicture::split_rules[ i ].Pos2.x;
89 ( pRect->Pos1 ).x = AGUIPicture::split_rules[ i ].Pos1.x;
90 ( pRect->Pos2 ).y = AGUIPicture::split_rules[ i ].Pos2.y;
91 ( pRect->Pos2 ).x = AGUIPicture::split_rules[ i ].Pos1.y;
92 ( pRect->UV1 ).y = AGUIPicture::split_rules[ i ].UV2.x;
93 ( pRect->UV1 ).x = AGUIPicture::split_rules[ i ].UV1.x;
94 ( pRect->UV2 ).y = AGUIPicture::split_rules[ i ].UV2.y;
95 ( pRect->UV2 ).x = AGUIPicture::split_rules[ i ].UV1.y;
96 }
97
99 }
100 }
101}
102
104{
105 if ( m_Name != a_rName ) Flush();
106 m_Name = a_rName;
107}
108
109void AGUIMatlibPicture::LoadMatLib()
110{
111 TString8 format( "16" );
112
113 TCHAR path[ 256 ];
114 TStringManager::String8Format( path, sizeof( path ), "data/matlibs/%s.ttl", m_Name.GetString8().GetString() );
115
116 m_pMaterialLibrary = AMaterialLibraryManager::List::GetSingleton()->CreateLibraryFromAsset(
117 path,
119 );
120}
121
122void AGUIMatlibPicture::UnloadMatLib()
123{
124 TVALIDPTR( m_pMaterialLibrary );
125
126 m_pMaterialLibrary->Destroy();
127 m_pMaterialLibrary = TNULL;
128 m_Name = TPString8();
129}
130
134
@ SYSRESOURCE_TEXTUREFACTORY
Definition TRender.h:20
Rendering system interface for the Toshi engine.
#define TASSERT(X,...)
Definition Defines.h:138
#define TOSHI_NAMESPACE_USING
Definition Defines.h:46
#define TVALIDPTR(PTR)
Definition Defines.h:139
#define TDEFINE_CLASS(...)
Definition TObject.h:120
char TCHAR
Definition Typedefs.h:20
#define TNULL
Definition Typedefs.h:23
int TINT
Definition Typedefs.h:7
#define TFALSE
Definition Typedefs.h:24
#define TTRUE
Definition Typedefs.h:25
@ AAssetType_AssetPack
Definition AAssetLoader.h:7
T * GetSystemResource(SYSRESOURCE systemResource)
static TFORCEINLINE TRenderInterface * GetSingleton()
Definition TSingleton.h:49
TString8 & Format(const TCHAR *a_pcFormat,...)
Definition TString8.cpp:176
static void String8Format(TCHAR *str, TINT size, const TCHAR *format,...)
static Toshi::TTRB * GetAssetTRB(AAssetType a_eAssetType)
static AGUI2Renderer * GetRenderer()
Definition AGUI2.cpp:239
virtual AGUI2Material * CreateMaterial(const TCHAR *a_szTextureName)=0
virtual void DestroyMaterial(AGUI2Material *a_pMaterial)=0
virtual void Create(const Toshi::TPString8 &a_rName) override
virtual void Cache() override
virtual void Flush() override
static SplitRule split_rules[6]
Definition AGUIPicture.h:54
TBOOL m_bLoaded
Definition AGUIPicture.h:65
TINT m_iNumRects2
Definition AGUIPicture.h:59
Image * m_pImages
Definition AGUIPicture.h:61
TINT m_iNumRects1
Definition AGUIPicture.h:58
Toshi::TPString8 m_Name
Definition AGUIPicture.h:62
Rectangle * m_pRectangles
Definition AGUIPicture.h:60